Ошибка компилятора C3445
Инициализация copy-list типа не может использовать явный конструктор
В соответствии со стандартом ISO C++17 компилятор должен рассмотреть явный конструктор для разрешения перегрузки в инициализации копирования списка, но должен вызвать ошибку, если эта перегрузка на самом деле выбрана.
Начиная с Visual Studio 2017 компилятор находит ошибки, связанные с созданием объектов, с помощью списка инициализатора, который не найден Visual Studio 2015. Эти ошибки могут привести к сбоям или неопределенному поведению во время выполнения.
Пример
В следующем примере создается C3445.
// C3445.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1 = { 1 }; // error C3445: copy-list-initialization of
// 'A' cannot use an explicit constructor
}
Чтобы исправить ошибку, используйте прямую инициализацию.
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}