[Issue 16345] IFTI fails with lazy variadic function in some cases
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Aug 1 03:55:01 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=16345
ag0aep6g at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
CC| |ag0aep6g at gmail.com
Summary|lazy variadic function in |IFTI fails with lazy
|template with default value |variadic function in some
|cannot be deduced |cases
--- Comment #1 from ag0aep6g at gmail.com ---
For reference, the spec describes lazy variadic functions here:
http://dlang.org/spec/function.html#lazy_variadic_functions
The test case doesn't need the template parameters to fail. This fails, too:
----
void all()(void delegate()[] dgs ...) {}
void f() {}
void main() { all(f()); } /* Error: template test.all cannot deduce function
from argument types !()(void) */
----
It works when the return type is int or another primitive type, including
pointers and arrays:
----
void all()(int delegate()[] dgs ...) {}
int f() { return 0; }
void main() { all(f()); } /* no error */
----
But it fails with Object and user-defined aggregates. Most peculiarly, it also
fails with an alias to a primitive type:
----
alias T = int;
void all()(T delegate()[] dgs ...) {}
T f() { return T.init; }
void main() { all(f()); } /* Error: template test.all cannot deduce function
from argument types !()(int) */
----
--
More information about the Digitalmars-d-bugs
mailing list