Hello,

I'm generating code using mixins and one of my mixins expands to something like this:

```
adder(MyType!MyEnum.INTEGER(), MyType!MyEnum.STRING());
```

`MyType!MyEnum.STRING` is generated with `T.stringof `. I get the error:

```
Error: template instance `MyType!(MyEnum)` does not match template declaration `MyType(MyEnum type)
```

and if I manually amend the code to this:

```
adder(MyType!(MyEnum.INTEGER)(), MyType!(MyEnum.STRING)());
```

It runs fine. It looks like the ambiguity of UFCS and type is messing things up. This is a simplified example. Since the code is being generated automatically in many places I can't go round adding the brackets.

A simplified functional example is given below:

```
import std.stdio: writeln;

enum MyEnum
{
  DOUBLE = 0,
  STRING = 1,
  INTEGER = 2
}

struct MyType(MyEnum type)
{}

auto getValue(T: MyType!U, alias U)(T x)
{
  return U;
}

auto adder(T, U)(T x, U y)
{
  return getValue(x) + getValue(y);
}

void main()
{
writeln("instance: ", adder(MyType!MyEnum.INTEGER(), MyType!MyEnum.STRING()));
}

```


Reply via email to