d模板参数函数中推导的错误消息

static int i;

void bar(T)(){
    static if(is(T == int))
        (()@system => 1)();
    static if(is(T == float))
        i = 42;

}
void foo(T)(){
    bar!T();
}

void main()@safe pure{
    foo!long();
    foo!float();    //Error: `pure` function `D main` cannot call impure function `onlineapp.foo!float.foo`
    foo!int();        //Error: `@safe` function `D main` cannot call `@system` function `onlineapp.foo!int.foo`
}

调用foo模板函数并且其推导的属性main的属性不匹配时,错误没用.编译器打印foo!float@纯foo!int@安全但没有说明原因.
dmd可用-verrors=context.

static int i;

void bar(T)(){
    static if(is(T == int))
        (()@system => 1)();
    static if(is(T == float))
        i = 42;

}
void foo(T)(){
    bar!T();
}

void main()@safe pure{
    foo!long();
    foo!float();    /+ onlineapp.d(16): Error: `pure` function `D main` cannot call impure function `onlineapp.foo!float.foo`
    foo!float();
          ^        +/

    foo!int();        /+onlineapp.d(18): Error: `@safe` function `D main` cannot call `@system` function `onlineapp.foo!int.foo`
    foo!int();
        ^        +/
}

不,不行,至少现在不行.不过,它正在处理中.
1
2
他们实际上是正确的,对于浮点,它显然不纯,而对于整数,它不安全.

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