Согласно этой статье, этот фрагмент кода должен работать:
Код: Выделить всё
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 MSVC14.0
Something s3 {};
return 0;
}
Код: Выделить всё
..\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
Код: Выделить всё
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;
}
Поскольку мне не удалось найти никаких заметок об этой практике в cppreference, Я не уверен, использую ли я UB или это просто ошибка MSVC14.00. Есть идеи?
Благодаря добрым комментариям, похоже, это ошибка этой версии MSVC. Однако я все еще не уверен, соответствует ли эта практика стандартам C++11? Я имею в виду, что большинство из нас знакомы с этой формой инициализации POD. Но я не могу найти или вывести из справочника CPP точную информацию о поведении таких кодов.
Подробнее здесь: https://stackoverflow.com/questions/793 ... rror-c2440
Мобильная версия