www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - compare types of functions.

reply vit <vit vit.vit> writes:
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
parent ag0aep6g <anonymous example.com> writes:
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