d同时模板查找名不检查模板外
string ta(string s) { return s ~ "1"; }
template ta(string s) { enum ta = .ta(s); }
void main()
{
import std.stdio;
writeln(ta("a"), ' ', ta!"b");
}
预期输出"a1 b1",所以编译器一般可识别符号何时引用函数,何时引用模板,但是如果我在ta*模板内删除ta(s)之前的.号,它会报错:
<src>(2):错误:前向引用ta变量
<src>(6):错误:实例化<src>.ta!"b"模板错误.
这似乎是个(优先级不高)小限制,即在(同名)模板内,查找符号时,不会在模板外查找其他可能匹配符号,且需要在前面加个"."号来告诉它查看顶级符号.
问题是,解析'ta(s)'时,'ta'首先搜索的域是当前域,而已按枚举定义'ta'符号.因此要加点号.替代方法是加特例.
总之,编译器正确的干活,无错误.
浙公网安备 33010602011771号