Initialisierung des MSVC-Standardmitglieds mit Gesamtinitialisierungsfehler C2440C++

Programme in C++. Entwicklerforum
Guest
 Initialisierung des MSVC-Standardmitglieds mit Gesamtinitialisierungsfehler C2440

Post by Guest »

Ich habe einige Probleme bei der Verwendung von Aggregatinitialisierern, um einen POD mit Standard-Mitgliedsinitialisierern zu initialisieren.
Laut diesem Artikel sollte dieser Codeausschnitt funktionieren:

Code: Select all

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;
}
Aber der Compiler hat den Fehler C2440 ausgegeben:

Code: Select all

..\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
Wenn ich die Wertinitialisierer von int y und int z entferne, kann der Code erfolgreich kompiliert werden.

Code: Select all

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;
}
Beachten Sie, dass ich MSVC14.00 (VS2015) verwende. Ich habe auch MSVC14.29 (VS2019) ausprobiert und der Code konnte erfolgreich kompiliert werden. Das bedeutet, dass nur MSVC14.00 dieses Problem hat.

Da ich auf cppreference keinen Hinweis zu dieser Vorgehensweise gefunden habe, Ich bin mir nicht sicher, ob ich ein UB verwende, oder ob dies nur ein Fehler von MSVC14.00 ist. Irgendwelche Ideen?

Dank der freundlichen Kommentare scheint es sich um einen Fehler dieser Version von MSVC zu handeln. Ich bin jedoch immer noch verwirrt, ob diese Vorgehensweise den C++11-Standards entspricht? Ich meine, die meisten von uns kennen diese Form der Initialisierung von PODs. Aber ich kann aus der CPP-Referenz keine genaue Aussage über das Verhalten solcher Codes finden oder ableiten.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post