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?!