constexpr-Fehler zur Kompilierungszeit, aber kein Overhead zur Laufzeit

Es gibt einen bekannten Trick, um bei der Auswertung von a einen Fehler beim Kompilieren zu verursachenconstexpr Funktionieren Sie folgendermaßen:

constexpr int f(int x) {
    return (x != 0) ? x : throw std::logic_error("Oh no!");
}

Und wenn die Funktion in a verwendet wirdconstexpr Kontext erhalten Sie einen Kompilierungsfehler, wennx == 0. Wenn das Argument zuf ist nichtconstexprIn diesem Fall wird jedoch zur Laufzeit eine Ausnahme ausgelöst, wennx == 0, was aus Performancegründen nicht immer erwünscht ist.

Ähnlich der Theorie vonassert bewacht vonNDEBUGGibt es eine Möglichkeit, einen Fehler beim Kompilieren mit einem zu verursachen?constexpr funktionieren, aber zur Laufzeit nichts tun?

Endlich entspanntconstexpr Regeln in C ++ 1y (C ++ 14) ändern etwas?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage