请考虑以下代码:
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打开一个问题,我想它应该无法编译,但我想知道我是否遗漏了一些关于函数模板的重要内容。