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

posted @   zjh6  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示