Erro do compilador C3445
a inicialização da lista de cópia de 'type' não pode usar um construtor explícito
De acordo com o padrão ISO C++ 17, o compilador precisará considerar um construtor explícito para resolução de sobrecarga na inicialização de lista de cópia, mas precisará gerar um erro se essa sobrecarga for realmente escolhida.
A partir do Visual Studio 2017, o compilador encontra erros relacionados à criação de objetos usando uma lista de inicializadores que não foram encontrados pelo Visual Studio 2015. Esses erros podem levar a falhas ou comportamento indefinido no runtime.
Exemplo
O exemplo a seguir gera o erro 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
}
Para corrigir o erro, em vez disso, use a inicialização direta:
// C3445b.cpp
struct A
{
explicit A(int) {}
A(double) {}
};
int main()
{
A a1{ 1 };
}