[Issue 14720] Template function reported as non-template

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Jun 22 16:00:07 PDT 2015


https://issues.dlang.org/show_bug.cgi?id=14720

--- Comment #2 from Yuxuan Shui <yshuiv7 at gmail.com> ---
Seems this bug is not related to nested templates at all, it's more likely an
'auto ref' bug:

import std.traits, std.range;

void a(S)(auto ref S i) { } 
void b(S)(auto ref S i) if (isInputRange!S) { }
void c(S)(ref S i) if (isInputRange!S) { }

void devil(alias S)() { }

void main() {
    a!string(""); //Works  <--- This line affects the result of
devil!(a!string)
    b!string(""); //Works

    //Next line is weird, it:
    //1. Err, 'auto ref can only be used with template function', if 'a' is not
    //   instantiated with 'a!string' first
    //2. Works, if 'a!string' is done first
    alias x = devil!(a!string); 

    alias xx = devil!(b!string); //Err, template doesn't match

    alias xxx = devil!(c!string); //Works
}

--


More information about the Digitalmars-d-bugs mailing list