UFCS call and regular call behaves differently with alias parameter

Jacob Carlborg doob at me.com
Sun Jun 17 09:14:52 PDT 2012


The following code shows that depending on how a function is called, 
UFCS or regular syntax, the type of T is inferred differently. If I 
remove the alias parameter the code behaves as expected.

string foo (alias p, T) (T t)
{
     return typeof(t).stringof;
}

void main ()
{
     string[string] aa;

     auto x = foo!(3 > 4)(aa);
     auto y = aa.foo!(3 > 4);

     assert(x == y);

     writeln("x=", x);
     writeln("y=", y);
}

In the above code the assert is triggered. If I remove the assert the 
code prints:

x=string[string]
y=AssociativeArray!(string,string)

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list