digitalmars.D.bugs - Template method bug bouquet
- Victor Nakoryakov (22/61) Jul 07 2005 Compilation gives:
- =?ISO-8859-1?Q?Thomas_K=FChne?= (26/94) Aug 28 2005 -----BEGIN PGP SIGNED MESSAGE-----
Hello all.module core; class MyClass { template foo(T) { T[] foo() { T[] tt; return tt; } } } class Container { this() { _element = new MyClass(); } MyClass element() { return _element; } private MyClass _element; } int main(char[][] args) { Container container = new Container(); MyClass myclass = new MyClass(); assert( container.element.foo!(MyClass).length == 0 ); // (*) assert( myclass.foo!(MyClass).length == 0 || myclass.foo!(MyClass)[0] is myclass ); // (**) return 0; }Compilation gives: D:\proj\dtest>dmd -unittest -debug core.d core.d(38): template foo!(MyClass) is not a member of container.element no property 'length' for type 'int' core.d(39): undefined identifier myclass dotexp template instance foo!(MyClass ).length core.d(39): void has no value core.d(39): incompatible types for ((myclass dotexp template instance foo!(MyClass ).length) == (0)): 'void' and 'int' + compiler crash. Commenting line (*) leads to successful compilation, link and run Commenting second condition in line (**) (that after || ) prevents compiler crash. Replacing line (*) with leads to successful compilation, link and run. -- Victor (aka nail) Nakoryakov nail-mail<at>mail<dot>ru Krasnoznamensk, Moscow, Russia
Jul 07 2005
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Victor Nakoryakov schrieb:Hello all.gdb / dmd-0.l29: Added to DStress as http://dstress.kuehne.cn/run/b/bug_expression_4275_A.d http://dstress.kuehne.cn/run/b/bug_expression_4275_B.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFDEYDl3w+/yD4P9tIRAgihAJ9kTuO3MPBIvZcxgAvIwipy6V9/XwCfSqss 7BSLmOSiwa7wUuVM6GzGyg4= =FMoF -----END PGP SIGNATURE-----module core; class MyClass { template foo(T) { T[] foo() { T[] tt; return tt; } } } class Container { this() { _element = new MyClass(); } MyClass element() { return _element; } private MyClass _element; } int main(char[][] args) { Container container = new Container(); MyClass myclass = new MyClass(); assert( container.element.foo!(MyClass).length == 0 ); // (*) assert( myclass.foo!(MyClass).length == 0 || myclass.foo!(MyClass)[0] is myclass ); // (**) return 0; }Compilation gives: D:\proj\dtest>dmd -unittest -debug core.d core.d(38): template foo!(MyClass) is not a member of container.element no property 'length' for type 'int' core.d(39): undefined identifier myclass dotexp template instance foo!(MyClass ).length core.d(39): void has no value core.d(39): incompatible types for ((myclass dotexp template instance foo!(MyClass ).length) == (0)): 'void' and 'int' + compiler crash. Commenting line (*) leads to successful compilation, link and run Commenting second condition in line (**) (that after || ) prevents compiler crash. Replacing line (*) with leads to successful compilation, link and run.
Aug 28 2005