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'
符号.因此要加点
号.替代方法是加特例
.
总之,编译器正确
的干活,无错误.