缩小,未评估的上下文和模板功能

时间:2016-11-07 23:14:21

标签: c++ c++11 templates decltype narrowing

请考虑以下代码:

auto f() -> decltype(int{0.}, void()) { }
int main() { f(); }

它没有编译(如预期的那样)并带有错误:

  

在{}

内缩小'0.0'从'double'到'int'的转换

GCC和clang都同意这一点 现在考虑以下代码:

template <typename T>
auto f(T) -> decltype(int{0.}, void()) { }

int main(){
    f(0);
}

在这种情况下,clang 3.9返回错误,GCC 6.2编译时没有错误。

在功能模板的情况下,是否有理由接受缩小转换,或者它是GCC的错误?

我打算向GCC打开一个问题,我想它应该无法编译,但我想知道我是否遗漏了一些关于函数模板的重要内容。

0 个答案:

没有答案
相关问题