Warum darf die Vorlagenversion in gcc kompiliert werden? Ist es ein Compilerfehler oder ist er tatsächlich gültig, wenn er mit Vorlagen verwendet wird? Kann mir das bitte jemand erklären?
Es kompiliert nicht auf clang oder anderen Compilern, die auf godbolt.org verwendet werden.
Die Kompilierungsfehler werden generiert, indem sowohl Zeichenfolge als auch Zeichenfolge in einem conexpr verwendet werden.
%Vor%GCC könnte hier richtig liegen. Laut dcl.constexpr Absatz 6:
Wenn die instanziierte Template-Spezialisierung einer constexpr-Funktion Vorlage oder Elementfunktion einer Klassenvorlage würde nicht genügen die Voraussetzungen für eine consExpr-Funktion oder einen consExpr-Konstruktor, Diese Spezialisierung ist immer noch eine Constexpr-Funktion oder Constexpr Konstruktor, obwohl ein Aufruf einer solchen Funktion nicht in einem konstanter Ausdruck. Wenn keine Spezialisierung der Vorlage würde erfüllen die Anforderungen für eine consExpr-Funktion oder consExpr Konstruktor, wenn er als Nicht-Template-Funktion oder Konstruktor betrachtet wird, die Vorlage ist schlecht geformt, keine Diagnose erforderlich.
Das Programm ist schlecht formatiert ( std::string
ist kein Literaltyp), aber es ist nicht erforderlich, eine Diagnose zu senden.