compare types of functions.

ag0aep6g anonymous at example.com
Wed Aug 4 06:09:08 UTC 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.


More information about the Digitalmars-d-learn mailing list