Warum ist ein Ausdruck konstant, aber nicht der andere?

8

Warum lehnt der Visual Studio 2013-Compiler die erste statische Assertion ab (Fehler C2057), aber nicht die zweite?

%Vor%     
jtooker 15.05.2015, 14:06
quelle

1 Antwort

8

Ich würde vermuten, dass in dieser Implementierung max() nicht constexpr ist (wie C ++ 11 sagt, sollte es sein), so dass maxHz kein konstanter Ausdruck ist, während minHz und invalidHz sind.

Die erste Assert-Anweisung schlägt daher fehl, da sie zur Kompilierzeit nicht ausgewertet werden kann. der zweite ist erfolgreich, weil der Vergleich vor || wahr ist, also wird der zweite Vergleich nicht ausgewertet.

    
Mike Seymour 15.05.2015, 14:11
quelle