Implicit fn template instantiation

Oskar Linde oskar.lindeREM at OVEgmail.com
Fri Mar 24 01:57:23 PST 2006


BCS wrote:
> In article <dvvk0i$2tum$1 at digitaldaemon.com>, anthony.difranco at yale.edu says...
>> Can someone explain why I can't instantiate this template implicitly andor
>> comment on whether I'm overlooking a better way to accomplish what this template
>> does?
>>
>> template increment(T, K)
>> {
>> void increment(T[K] association, K key)
>> {
>> if(key in association)
>> {
>> association[key]++;
>> }
>> else
>> {
>> association[key] = 1;
>> }
>> }
>> }
>>
>> Thanks,
>> Anthony
>>
>>
> 
> IIRC
> 
> if(T* val = (key in association))
> (*val)++;
> else
> association[key]=1;
> 
> haven't tried it but it should work

Yes. A full working version with the current limited IFTI would look like:

template increment(T,K) {
	static assert(is(K : typeof(T.init.keys[0])));
	void increment(inout T association, K key) {
		if(auto val = (key in association))
			(*val)++;
		else
			association[key]=1;
	}
}


/Oskar



More information about the Digitalmars-d mailing list