Kompilatorfel C3445

copy-list-initialization av "type" kan inte använda en explicit konstruktor

Anmärkningar

Enligt ISO C++17-standarden måste kompilatorn överväga en explicit konstruktor för överbelastningsmatchning vid copy-list-initialisering, men måste generera ett fel om den faktiskt väljs.

Från och med Visual Studio 2017 hittar kompilatorn fel relaterade till att skapa objekt med hjälp av en initialiserarlista som inte hittades av Visual Studio 2015. Dessa fel kan leda till krascher eller odefinierat beteende vid körning.

Example

I följande exempel genereras 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
}

Åtgärda felet genom att använda direktinitiering i stället:

// C3445b.cpp
struct A
{
    explicit A(int) {}
    A(double) {}
};

int main()
{
    A a1{ 1 };
}