不能将本地“i”用作非全局模板的参数

时间:2015-11-07 14:57:17

标签: d d-templates

template IsSame(T){
  template As(alias t){
    enum As = is(T : typeof(t));
  }
}
void main()
{
  int i;
  enum b = IsSame!int.As!(i);
}

错误:

  

错误:模板实例As!(i)不能使用本地'i'作为参数   非全局模板As(别名t)dmd失败,退出代码为1

我不明白错误信息。

我也试过

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

结果是

  

错误:模板app.IsSame!int.As不能从参数中推断出函数   types!()(int),候选者是:source / app.d(50,8):
  app.IsSame!int.As(别名t)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在dmd 2.069.0和dmd 2.065中,当i为全局时,它可以正常工作:

import std.stdio;

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

int i;

void main()
{
  bool b = IsSame!int.As!(i);
  writeln(b); // true
}

这些documentation for template alias parameters声明允许模板使用本地名称进行参数化,但未能提供有关如何执行此操作的示例:

  

别名参数使模板可以使用任何类型的D符号进行参数化,包括全局名称,本地名称,模块名称,模板名称和模板实例名称。文字也可以用作别名参数的参数。

(强调我的)