UFCS call and regular call behaves differently with alias parameter

Timon Gehr timon.gehr at gmx.ch
Sun Jun 17 09:46:38 PDT 2012


On 06/17/2012 06:14 PM, Jacob Carlborg wrote:
> 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

This should go straight to the bug tracker. User code is not supposed to 
see the AssociativeArray rewrite.


More information about the Digitalmars-d mailing list