Thread overview
template with enum parameter doesn't compile
Apr 05, 2019
Sjoerd Nijboer
Apr 05, 2019
lithium iodate
Apr 05, 2019
Sjoerd Nijboer
Apr 05, 2019
Nicholas Wilson
April 05, 2019
So the following code doesn't compile for some reason, and I can't figure out why.

enum MyEnum { A, B, C }

class MyClass(MyEnum myEnum)
{
    /*...*/
}

int main()
{
	MyClass!MyEnum.A a;
}

The error:  Error: template instance `MyClass!(MyEnum)` does not match template declaration `MyClass(MyEnum myEnum)`
pops up, no matter what I do.
I'm quite puzzled actually
April 05, 2019
On Friday, 5 April 2019 at 14:47:42 UTC, Sjoerd Nijboer wrote:
> So the following code doesn't compile for some reason, and I can't figure out why.

> The error:  Error: template instance `MyClass!(MyEnum)` does not match template declaration `MyClass(MyEnum myEnum)`
> pops up, no matter what I do.
> I'm quite puzzled actually

You are just having a little issue with operator precedence there. Your code attempts to get the member `A` from `MyClass!MyEnum`, if you add braces around it, it'll work just fine `MyClass!(MyEnum.A)`.
April 05, 2019
On Friday, 5 April 2019 at 14:47:42 UTC, Sjoerd Nijboer wrote:
> So the following code doesn't compile for some reason, and I can't figure out why.
>
> enum MyEnum { A, B, C }
>
> class MyClass(MyEnum myEnum)
> {
>     /*...*/
> }
>
> int main()
> {
> 	MyClass!MyEnum.A a;
> }
>
> The error:  Error: template instance `MyClass!(MyEnum)` does not match template declaration `MyClass(MyEnum myEnum)`
> pops up, no matter what I do.

You wrote:

> MyClass!MyEnum.A a;

Which is equivalent to

> MyClass!(MyEnum).A a;

What you want is

MyClass!(MyEnum.A) a;

April 05, 2019
On Friday, 5 April 2019 at 14:52:05 UTC, lithium iodate wrote:
> You are just having a little issue with operator precedence there. Your code attempts to get the member `A` from `MyClass!MyEnum`, if you add braces around it, it'll work just fine `MyClass!(MyEnum.A)`.


That's really funny acutally.
It works. Thank you!