7

考虑以下代码:

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 提出一个问题,因为我想它应该无法编译,但我想知道我是否在这里遗漏了一些关于函数模板的重要内容。

4

0 回答 0