Ist es erlaubt, eine nicht-const Referenz als constexpr
zu deklarieren? Beispielcode:consExpr Verweis auf nicht-const Objekt
int x = 1;
constexpr int& r = x;
Diese von gcc und Klirren akzeptiert wird (Ich habe versucht, mehrere aktuelle und frühere Versionen der beiden, zurück zu C++ 11 und akzeptiert es). Aber ich denke, ihm nicht akzeptiert werden soll, weil C++ 14 [dcl.constexpr/9] sagt:
wenn ein constexpr Spezifizierer in einer Referenz Erklärung verwendet wird, jeder Voll Ausdruck, der in seinem initializer erscheint soll ein konstanter Ausdruck sein
und x
ist kein konstanter Ausdruck.
Die Sprache in der neuesten C++ 17 Entwurf von [dcl.constexpr] geändert und erwähnt nicht einmal constexpr
Referenzen explizit mehr, ich kann nicht Kopf oder Schwanz von dem, was es über sie versucht zu sagen .
Wer sagt, 'x' ist kein konstanter Ausdruck? –
"x ist keine Kernkonstante Ausdruck" –
@ T.C. [expr.const]/2 "' e "ist ein Kernkonstantenausdruck, es sei denn, die Auswertung von 'e' würde eine der folgenden Aussagen auswerten: [...] eine lvalue-to-rvalue-Konvertierung, es sei denn, sie wird auf [cases angewendet dass dieser Code nicht übereinstimmt] " –