sky*_*ack 7 c++ templates decltype narrowing c++11
请考虑以下代码:
auto f() -> decltype(int{0.}, void()) { }
int main() { f(); }
Run Code Online (Sandbox Code Playgroud)
它没有编译(如预期)并出现错误:
在{}内缩小'0.0'从'double'到'int'的转换
海湾合作委员会和克朗都同意这一点.
现在考虑以下代码:
template <typename T>
auto f(T) -> decltype(int{0.}, void()) { }
int main(){
f(0);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,clang 3.9返回错误,GCC 6.2编译时没有错误.
在功能模板的情况下是否应该接受缩小转换或者是GCC的错误?
我打算向GCC打开一个问题,我想它应该无法编译,但我想知道我是否遗漏了一些关于函数模板的重要信息.