www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Cannot use local 'i' as parameter to non-global template

reply maik klein <maikklein googlemail.com> writes:
template IsSame(T){
   template As(alias t){
     enum As = is(T : typeof(t));
   }
}
void main()
{
   int i;
   enum b = IsSame!int.As!(i);
}

Err:

Error: template instance As!(i) cannot use local 'i' as parameter 
to non-global template As(alias t) dmd failed with exit code 1
I don't understand the error message.

I also tried

template IsSame(T){
   enum As(alias t) = is(T : typeof(t));
}

Which results in

Error: template app.IsSame!int.As cannot deduce function from 
argument types !()(int), candidates are: source/app.d(50,8):
app.IsSame!int.As(alias t)

What am I doing wrong?

Ps: Also posted on SO 
https://stackoverflow.com/questions/33584130/cannot-use-local-i-as-parameter-to
non-global-template not sure where people usually ask questions about D.
Nov 07 2015
parent Nicholas Wilson <iamthewilsonator hotmail.com> writes:
On Saturday, 7 November 2015 at 15:04:41 UTC, maik klein wrote:
 template IsSame(T){
   template As(alias t){
     enum As = is(T : typeof(t));
   }
 }
 void main()
 {
   int i;
   enum b = IsSame!int.As!(i);
 }

 Err:

 Error: template instance As!(i) cannot use local 'i' as 
 parameter to non-global template As(alias t) dmd failed with 
 exit code 1
 I don't understand the error message.

 I also tried

 template IsSame(T){
   enum As(alias t) = is(T : typeof(t));
 }

 Which results in

 Error: template app.IsSame!int.As cannot deduce function from 
 argument types !()(int), candidates are: source/app.d(50,8):
 app.IsSame!int.As(alias t)

 What am I doing wrong?

 Ps: Also posted on SO 
 https://stackoverflow.com/questions/33584130/cannot-use-local-i-as-parameter-to
non-global-template not sure where people usually ask questions about D.
Two ways to go about doing this template IsSame(T,U) { enum IsSame = is(T : U) } or make i a "global" by using a template alias Identity(T) = T; template IsSame(T){ enum As(alias t) = is(T : typeof(t)); } enum b = IsSame!int.As!Identity!(i);
Nov 08 2015