On Friday, 27 April 2018 at 13:39:22 UTC, Simen Kjærås wrote:
That's an unfortunate error message. The problem is TempStruct is defined inside the Temp template. In the same way that struct Foo(T) {} is different for Foo!int and Foo!string, TempStruct is a different type for Temp!(menum.A) and Temp!(menum.B).

The solution is to move TempStruct outside the template:

struct TempStruct { uint i; }

template Temp(menum e)
{
    TempStruct Temp;
    shared static this()
    {
        static if (e == menum.A)
            Temp.i = 3;
    }
}

--
  Simen

Ty.
I figured that's the reason. I still can't quite get my head around "Why?" though.

`instantiateWith` gets called in three variations (menum.A, menum.B and menum.C). This causes instantiateWith to return TempStruct for each case of Temp...

However, I was under the impression that a templated function will exist multiple (in this case 3) times, so the return type should be allowed to be different?!

Reply via email to