无法使用本地';i';作为非全局模板的参数 模板名称(T){ 模板As(别名t){ 枚举As=is(T:typeof(T)); } } void main() { int i; 枚举b=IsName!int.As!(i); }

无法使用本地';i';作为非全局模板的参数 模板名称(T){ 模板As(别名t){ 枚举As=is(T:typeof(T)); } } void main() { int i; 枚举b=IsName!int.As!(i); },d,d-templates,D,D Templates,错误: 错误:模板实例为!(i) 无法使用本地“i”作为参数来 非全局模板As(别名t)dmd失败,退出代码为1 我不明白错误信息 我也试过了 模板名称(T){ 枚举As(别名t)=is(t:typeof(t)); } 导致 错误:模板app.IsSame!int.As无法从参数推断函数 类型!()(int),候选项为:来源/附录d(50,8): app.IsSame!int.As(别名t) 我做错了什么?在dmd 2.069.0和dmd 2.065中,当I为全局时,它工作正常: 导入标准st

错误:

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

我不明白错误信息

我也试过了

模板名称(T){
枚举As(别名t)=is(t:typeof(t));
}
导致

错误:模板app.IsSame!int.As无法从参数推断函数 类型!()(int),候选项为:来源/附录d(50,8):
app.IsSame!int.As(别名t)


我做错了什么?

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

导入标准stdio;
模板名称(T){
模板As(别名t){
枚举As=is(T:typeof(T));
}
}
int i;
void main()
{
bool b=isname!int.As!(i);
writeln(b);//正确
}
这些声明也允许使用本地名称对模板进行参数化,但未能提供如何进行参数化的示例:

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


(我的重点)

是否有理由在
b
中使用
enum
而不是
bool
?我在编译时需要它,不确定bool是否足以满足此要求。如果我将模板标记为静态,就像
staitc template isame(T)一样有效{
为了完整起见,您可能希望将工作代码作为自己的答案发布。