Инициализация элемента MSVC2015 по умолчанию с совокупной ошибкой инициализации C2440C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Инициализация элемента MSVC2015 по умолчанию с совокупной ошибкой инициализации C2440

Сообщение Anonymous »

У меня возникли проблемы с использованием агрегатных инициализаторов для инициализации POD с инициализаторами членов по умолчанию.
Согласно этой статье, этот фрагмент кода должен работать:

Код: Выделить всё

struct Something
{
int x;
int y {};    // default initializer with default value
int z { 2 }; // default initializer with specific value
};

int main()
{
Something s1;
Something s2 { 5, 6, 7 }; // this cause error C2440 in MSVC2015
Something s3 {};
return 0;
}
Но компилятор выдал ошибку C2440:

Код: Выделить всё

..\TestAnything\main.cpp(11): error C2440: 'initializing': cannot convert from 'initializer list' to 'Something'
..\TestAnything\main.cpp(11): note: No constructor could take the source type, or constructor overload resolution was ambiguous
Если я удалю инициализаторы значений int y и int z, код можно будет успешно скомпилировать.

Код: Выделить всё

struct Something
{
int x;
int y; // no default initializer
int z; // no default initializer
};

int main()
{
Something s1;
Something s2 { 5, 6, 7 }; // this works fine
Something s3 {};
return 0;
}
Обратите внимание, что я использую MSVC2015. Я также попробовал MSVC2017, и он успешно скомпилировал код. Это означает, что только MSVC2015 имеет эту проблему.

Поскольку мне не удалось найти никаких заметок об этой практике в cppreference, я Я не уверен, использую ли я UB или это просто ошибка MSVC2015. Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/793 ... error-c244
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»