digitalmars.D.learn - Function overload with template alias error
- =?ISO-8859-1?Q?Andr=E9_Stein?= (35/35) Dec 24 2011 Hi,
- Timon Gehr (4/39) Dec 24 2011 IFTI can only deduce template parameters for symbols that are defined
Hi, I'm trying to write a template function which takes a templated alias to another type: struct test(T) { } template aliasT(T) { alias test!(T) aliasT; } void foo(T)(test!T t) { // works } void foo2(T)(aliasT!T t) { // doesn't work } int main(string[] args) { test!(int) t; aliasT!(int) t2; foo(t); foo2(t2); // error return 0; } When foo2(t2) is called which takes an alias to test!T as argument I get the following error from dmd: *(21): Error: template variant.foo2(T) does not match any function template declaration *(21): Error: template variant.foo2(T) cannot deduce template function from argument types !()(test!(int)) I thought that aliasT!T and test!T have the same internal types and the compiler would be able deduce the template parameters. Am I missing something or is this a bug in DMD? This is a reduced test case from a piece of code where I tried to write an templated overload to std.variant.Algebraic. Thanks, Andr�
Dec 24 2011
On 12/24/2011 11:23 AM, Andr� Stein wrote:Hi, I'm trying to write a template function which takes a templated alias to another type: struct test(T) { } template aliasT(T) { alias test!(T) aliasT; } void foo(T)(test!T t) { // works } void foo2(T)(aliasT!T t) { // doesn't work } int main(string[] args) { test!(int) t; aliasT!(int) t2; foo(t); foo2(t2); // error return 0; } When foo2(t2) is called which takes an alias to test!T as argument I get the following error from dmd: *(21): Error: template variant.foo2(T) does not match any function template declaration *(21): Error: template variant.foo2(T) cannot deduce template function from argument types !()(test!(int)) I thought that aliasT!T and test!T have the same internal types and the compiler would be able deduce the template parameters. Am I missing something or is this a bug in DMD? This is a reduced test case from a piece of code where I tried to write an templated overload to std.variant.Algebraic. Thanks, Andr�IFTI can only deduce template parameters for symbols that are defined inside the template instantiation because then the symbol remembers the template parameters. IFTI cannot reverse-instantiate templates.
Dec 24 2011