Der folgende CodeEine consExpr-Methode durch eine Referenz aufrufen - ist das Ergebnis ein konstanter Ausdruck?
#include <array>
void foo(const std::array<int, 42> &a)
{
constexpr size_t S = a.size();
}
int main() {}
kompiliert in GCC in Ordnung, aber nicht in Klirren mit der folgenden Fehlermeldung
main.cpp:5:28: error: constexpr variable 'S' must be initialized by a constant expression
constexpr size_t S = a.size();
^~~~~~~~
Inzwischen viele Beiträge über constexpr
Fragen auf SO zu kompilieren scheinen, dass Klappern oft zu implizieren hat bessere (mehr pedantische?) Unterstützung für constexpr
. Also, welcher Compiler wäre in diesem Fall korrekt?
Beachten Sie, dass beide Compiler den Code gerne akzeptieren, sobald der Referenzparameter durch den Pass-by-Value-Parameter ersetzt wurde.