Confused by refusal to expand template

David d at dav1d.de
Fri Mar 23 15:58:58 PDT 2012


Am 23.03.2012 23:52, schrieb H. S. Teoh:
> Code:
> 	struct S {
> 		int f(K)(K x) {
> 			return 1;
> 		}
> 		void func(K)(inout(K) x) {
> 			auto h = f(x);
> 		}
> 	}
> 	void main() {
> 		S s;
> 		s.func("abc");	// This is line 44
> 	}
>
> This refuses to compile:
>
> test2.d(44): Error: template test2.S.func(K) does not match any function template declaration
> test2.d(44): Error: template test2.S.func(K) cannot deduce template function from argument types !()(string)
>
> Removing 'inout' fixes the problem. But I don't understand why.
>
>
> T
>
I've never really used inout, but don't you need it also for the 
return-type? Furthermore you don't the the inout here, since this 
template does match const/immutable/nothing anyways.


More information about the Digitalmars-d-learn mailing list