0
点赞
收藏
分享

微信扫一扫

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​​ 他们实际上是​​正确​​的,对于​​浮点​​,它显然​​不纯​​,而对于​​整数​​,它不​​安全​​.


举报

相关推荐

0 条评论