【发布时间】:2017-02-22 09:43:15
【问题描述】:
鉴于此代码(在wandbox):
struct X
{
explicit operator int() { return 0; }
};
int main()
{
auto y = int{X{}};
}
以及以下编译器选项:
-std=c++1z -Wall -Wextra -Wpedantic
-
g++(测试版本:7、6.1、5.3) 拒绝编译代码并出现以下错误错误:无法在初始化中将 'X' 转换为 'int'
clang++(测试版本:4、3.8、3.6) 愉快地编译了sn-p。
哪个编译器在这里做正确的事情?
cppreference 似乎暗示auto var = type{...} 语法应该触发显式转换。
【问题讨论】:
-
FWIW,MSVC 也能顺利编译。
-
@Danh g++ 接受
int y{X{}},如果只考虑隐式转换,则不应接受(因此要么这是错误的,要么是另一个错误)。
标签: c++ type-conversion language-lawyer c++17 explicit