[Issue 16075] Compiler rejects basic mixin template
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed May 25 14:23:11 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=16075
b2.temp at gmx.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |b2.temp at gmx.com
Resolution|--- |INVALID
--- Comment #1 from b2.temp at gmx.com ---
(In reply to Max Samukha from comment #0)
> mixin template Foo(A...) {
> static if (A.length) {
> void foo(A[0] a) {
> }
>
> mixin Foo!(A[1..$]) F;
> alias foo = F.foo;
> }
> }
>
> mixin Foo!(int, string, bool);
>
> void main() {
> }
>
> Error: alias test.Foo!(int, string, bool).Foo!(string, bool).Foo!bool.foo
> recursive alias declaration
>
>
> The mixin should produce properly nested overload sets of foo:
>
> foo(int); foo(string); foo(bool);
> F.foo(string); F.foo(bool);
> F.F.foo(bool);
Hi, there is an error in your code, the correct way to write your template is:
mixin template Foo(A...)
{
static if (A.length)
{
void foo(A[0] a) {}
static if (A.length > 1) // here !!
{
mixin Foo!(A[1..$]) F;
alias foo = F.foo;
}
}
}
mixin Foo!(int,string,bool);
void main() {}
otherwise the instanciation continues endlessly with an empty A.
--
More information about the Digitalmars-d-bugs
mailing list