Thread overview
template instance does not match template declaration
Jan 08, 2017
Fabrice Marie
Jan 08, 2017
Nicholas Wilson
Jan 08, 2017
Meta
Jan 15, 2017
Fabrice Marie
January 08, 2017
Hi,

On my first attempt to create a templated class, I'm hitting an issue that I can't seem to resolve.

I've dustmite'd the code down to:

class Cache(O, K, F)
{
}


void main()
{
	class BasicObject
	{
	}

	BasicObject lookupBasicObject() {
	}

        Cache!(BasicObject, string, lookupBasicObject);
}


and I'm hitting the following error:

cache.d(23): Error: template instance Cache!(BasicObject, string, lookupBasicObject) does not match template declaration Cache(O, K, F)

Any help would be much appreciated in understanding what I am doing wrong.

Thanks.

Take care,
Fabrice.
January 08, 2017
On Sunday, 8 January 2017 at 03:27:26 UTC, Fabrice Marie wrote:
> Hi,
>
> On my first attempt to create a templated class, I'm hitting an issue that I can't seem to resolve.
>
> I've dustmite'd the code down to:
>
> class Cache(O, K, F)
> {
> }
>
>
> void main()
> {
> 	class BasicObject
> 	{
> 	}
>
> 	BasicObject lookupBasicObject() {
> 	}
>
>         Cache!(BasicObject, string, lookupBasicObject);
> }
>
>
> and I'm hitting the following error:
>
> cache.d(23): Error: template instance Cache!(BasicObject, string, lookupBasicObject) does not match template declaration Cache(O, K, F)
>
> Any help would be much appreciated in understanding what I am doing wrong.
>
> Thanks.
>
> Take care,
> Fabrice.

By default template parameters are Types. lookupBasicObject is not.

change this `class Cache(O, K, F)` to `class Cache(O, K, alias F)`
and it should work.

January 08, 2017
On Sunday, 8 January 2017 at 03:27:26 UTC, Fabrice Marie wrote:

> void main()
> {
>       ....
>       Cache!(BasicObject, string, lookupBasicObject);
> }

In addition to what Nicholas Wilson said, what you're doing here is the equivalent of writing `int;`. It doesn't make any sense as Cache!(...) is a type, and you are declaring a variable of that type... except you're not providing a variable name so the syntax is wrong. After you've fixed the other problem change it to this:

Cache!(BasicObject, string, lookupBasicObject) c;
January 15, 2017
On Sunday, 8 January 2017 at 05:45:52 UTC, Meta wrote:
> On Sunday, 8 January 2017 at 03:27:26 UTC, Fabrice Marie wrote:
>
>> void main()
>> {
>>       ....
>>       Cache!(BasicObject, string, lookupBasicObject);
>> }
>
> In addition to what Nicholas Wilson said, what you're doing here is the equivalent of writing `int;`. It doesn't make any sense as Cache!(...) is a type, and you are declaring a variable of that type... except you're not providing a variable name so the syntax is wrong. After you've fixed the other problem change it to this:
>
> Cache!(BasicObject, string, lookupBasicObject) c;

Thanks a lot! exactly what I needed.