[Issue 13863] New: More readable template constraints
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Mon Dec 15 04:50:49 PST 2014
    
    
  
https://issues.dlang.org/show_bug.cgi?id=13863
          Issue ID: 13863
           Summary: More readable template constraints
           Product: D
           Version: unspecified
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: Phobos
          Assignee: nobody at puremagic.com
          Reporter: kiithsacmp at gmail.com
Complicated template constraints in function signatures of many Phobos
functions severely affect readability of standard library documentation.
This could be mitigated by refactoring the constraints into separate template
predicates invoked in the (now much shorter) template constraints. These
predicated can then be descriptively documented as well.
E.g. instead of:
--------------------
ptrdiff_t countUntil(alias pred = "a == b", R, Rs...)(R haystack, Rs needles)
if (isForwardRange!R && Rs.length > 0 && isForwardRange!(Rs[0]) ==
isInputRange!(Rs[0]) && is(typeof(startsWith!pred(haystack, needles[0]))) &&
(Rs.length
== 1 || is(typeof(countUntil!pred(haystack, needles[1..$])))));
--------------------
Use something like this:
--------------------
ptrdiff_t countUntil(alias pred = "a == b", R, Rs...)(R haystack,
Rs needles) if (canCountUntil!(pred, R, Rs));
/** A range can be counted if:
- R is a forward range
- pred is a valid string comparison predicate, or a function that can
compare R.front with Rs.front
- ...
*/
template canCountUntil(alias pred, R, Rs...)
{
   ...
}
--------------------
See also:
http://forum.dlang.org/post/mailman.3193.1418597982.9932.digitalmars-d@puremagic.com
http://forum.dlang.org/post/slssjxbsguvhcbdlfefu@forum.dlang.org
--
    
    
More information about the Digitalmars-d-bugs
mailing list