digitalmars.D.bugs - [Issue 6740] New: Can't call variadic type argument as a template function
- d-bugmail puremagic.com (45/45) Sep 28 2011 http://d.puremagic.com/issues/show_bug.cgi?id=6740
- d-bugmail puremagic.com (11/11) Feb 10 2013 http://d.puremagic.com/issues/show_bug.cgi?id=6740
http://d.puremagic.com/issues/show_bug.cgi?id=6740 Summary: Can't call variadic type argument as a template function Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: andrej.mitrovich gmail.com --- Comment #0 from Andrej Mitrovic <andrej.mitrovich gmail.com> 2011-09-28 11:25:03 PDT --- template test(T, Preds...) { enum bool test = Preds[0]!T; // error: semicolon expected, not '!' } Example use-case: import std.traits; template anyPredicateSatisfy(T, Preds...) { static if (Preds.length) enum bool anyPredicateSatisfy = (Preds[0]!T) || anyPredicateSatisfy!(T, Preds[1 .. $]); else enum bool anyPredicateSatisfy = false; } void main() { assert(anyPredicateSatisfy!(int, isFloatingPoint, isIntegral)); } A workaround (by Bearophile) is: template satisfies(T, alias P) { enum satisfies = P!T; } template anyPredicateSatisfy(T, Preds...) { static if (Preds.length) enum bool anyPredicateSatisfy = satisfies!(T, Preds[0]) || anyPredicateSatisfy!(T, Preds[1 .. $]); else enum bool anyPredicateSatisfy = false; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 28 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6740 Andrej Mitrovic <andrej.mitrovich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |DUPLICATE --- Comment #1 from Andrej Mitrovic <andrej.mitrovich gmail.com> 2013-02-10 09:10:37 PST --- *** This issue has been marked as a duplicate of issue 6474 *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 10 2013