컴파일러 오류 C3445
'type'의 copy-list-initialization은 명시적 생성자를 사용할 수 없습니다.
ISO C++17 표준에 따라 컴파일러는 copy-list-initialization에서 오버로드 확인을 위해 명시적 생성자를 고려해야 하지만 해당 오버로드가 실제로 선택된 경우 오류를 발생시켜야 합니다.
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 };
}