digitalmars.D.learn - itfi limitation or bug on my part?
- Brad Roberts (22/22) Aug 07 2010 module test;
- Don (10/38) Aug 07 2010 Looks like a compiler bug. If you change func2 to this:
- Brad Roberts (4/46) Aug 07 2010 Other way around.. T should be 'int' instead of 'const(int)'. Thanks fo...
module test; void main() { int[] foos; func1(foos); } void func1(T)(const T[] foos) { T afoo; func2(foos, afoo); } void func2(T)(const T[] foos, out T afoo) { } $ dmd -c test.d test.d(12): Error: template test.func2(T) does not match any function template declaration test.d(12): Error: template test.func2(T) cannot deduce template function from argument types !()(const(int[]),int) test.d(6): Error: template instance test.func1!(int) error instantiating Ignore style.. this is a massively reduced case from a much more complex block of code.
Aug 07 2010
Brad Roberts wrote:module test; void main() { int[] foos; func1(foos); } void func1(T)(const T[] foos) { T afoo; func2(foos, afoo); } void func2(T)(const T[] foos, out T afoo) { } $ dmd -c test.d test.d(12): Error: template test.func2(T) does not match any function template declaration test.d(12): Error: template test.func2(T) cannot deduce template function from argument types !()(const(int[]),int) test.d(6): Error: template instance test.func1!(int) error instantiating Ignore style.. this is a massively reduced case from a much more complex block of code.Looks like a compiler bug. If you change func2 to this: void func2(T, U)(const T[] foos, out U afoo) { static assert(is(T==U)); } test0.d(212): Error: static assert (is(const(int) == int)) is false test0.d(207): instantiated from here: func2!(const(int),int) test0.d(201): instantiated from here: func1!(int) T should be "const(int)" instead of "int".
Aug 07 2010
On 8/7/2010 12:42 PM, Don wrote:Brad Roberts wrote:Other way around.. T should be 'int' instead of 'const(int)'. Thanks for the confirmation. I thought the same thing but wanted independent confirmation. I'll file the bug.module test; void main() { int[] foos; func1(foos); } void func1(T)(const T[] foos) { T afoo; func2(foos, afoo); } void func2(T)(const T[] foos, out T afoo) { } $ dmd -c test.d test.d(12): Error: template test.func2(T) does not match any function template declaration test.d(12): Error: template test.func2(T) cannot deduce template function from argument types !()(const(int[]),int) test.d(6): Error: template instance test.func1!(int) error instantiating Ignore style.. this is a massively reduced case from a much more complex block of code.Looks like a compiler bug. If you change func2 to this: void func2(T, U)(const T[] foos, out U afoo) { static assert(is(T==U)); } test0.d(212): Error: static assert (is(const(int) == int)) is false test0.d(207): instantiated from here: func2!(const(int),int) test0.d(201): instantiated from here: func1!(int) T should be "const(int)" instead of "int".
Aug 07 2010