Учитывая этот код (на wandbox):`авто х = тип {...}` синтаксис инициализации и `explicit` оператор преобразования - лязг против НКИ
struct X
{
explicit operator int() { return 0; }
};
int main()
{
auto y = int{X{}};
}
И следующие параметры компилятора:
-std=c++1z -Wall -Wextra -Wpedantic
g++
(TES Ted версии: 7, 6.1, 5.3)отказывается компилировать код со следующей ошибкойerror: cannot convert 'X' to 'int' in initialization
clang++
(проверенные версии: 4, 3.8, 3.6)благополучно компилирует фрагмент.
Какой компилятор делает правильную вещь здесь?
cppreference, похоже, предполагает, что синтаксис auto var = type{...}
должен инициировать явное преобразование.
FWIW, MSVC счастливо компилируется тоже. –
@Danh g ++ принимает 'int y {X {}}', который не должен приниматься, если рассматривается только неявное преобразование (так что либо это неправильно, либо другое неверно). – Holt