Can't call nested template function unless it's anonymous?

Vladimir Panteleev via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Nov 4 17:48:45 PST 2015


///////////////////////// test.d /////////////////////////
// Call alias with a parameter.
void callAlias(alias f)()
{
     f(42);
}

alias Identity(alias X) = X;

void main()
{
     int local;

     // Declare an anonymous function template
     // which writes to a local.
     alias a = Identity!((i) { local = i; });

     // Declare a function template which does
     // the same thing.
     void b(T)(T i) { local = i; }

     callAlias!a; // Works
     callAlias!b; // Error: function test.main.b!int.b is a
                  // nested function and cannot be accessed
                  // from test.callAlias!(b).callAlias
}
//////////////////////////////////////////////////////////

Is this a bug or some sort of limitation? As far as I can tell, a 
and b are essentially the same, except one is anonymous.



More information about the Digitalmars-d-learn mailing list