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

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打开一个问题,我想它应该无法编译,但我想知道我是否遗漏了一些关于函数模板的重要信息.