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)
我做错了什么?
答案 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符号进行参数化,包括全局名称,本地名称,模块名称,模板名称和模板实例名称。文字也可以用作别名参数的参数。
(强调我的)