digitalmars.D.learn - compare types of functions.
Hello, Why this doesn't work: ```d template DestructorType(T){ alias Get(T) = T; alias DestructorType = Get!(typeof((void*){ T tmp; })); } struct Foo{ ~this() safe{} } ``` ```d void main(){ //Error: static assert: `is(void function(void*) pure nothrow nogc safe : void function(void*) safe)` is false static assert(is(void function(void*)pure nothrow safe nogc : DestructorType!Foo)); } ``` but this work: ```d void main(){ alias X = void function(void*) safe; static assert(is(void function(void*)pure nothrow safe nogc : DestructorType!Foo)); } ```
Aug 02 2021
On 02.08.21 22:14, vit wrote:Why this doesn't work: ```d template DestructorType(T){ alias Get(T) = T; alias DestructorType = Get!(typeof((void*){ T tmp; })); } struct Foo{ ~this() safe{} } ``` ```d void main(){ //Error: static assert: `is(void function(void*) pure nothrow nogc safe : void function(void*) safe)` is false static assert(is(void function(void*)pure nothrow safe nogc : DestructorType!Foo)); } ``` but this work: ```d void main(){ alias X = void function(void*) safe; static assert(is(void function(void*)pure nothrow safe nogc : DestructorType!Foo)); } ```Looks like you found a compiler bug. An unused alias should have any effect.
Aug 03 2021