static_assert und Intel C ++ - Compiler

8

Lesen cppreference.com :

  

Eine statische assert-Deklaration kann im Blockbereich (als Block) erscheinen   Deklaration) und innerhalb eines Klassenkörpers (als Mitgliedserklärung)

OK, jetzt habe ich den folgenden Code:

%Vor%

Weder MSVC 2015 noch Intel C ++ 16.0.2 kompilieren diesen Code (ersterer zeigt "Fehler C2131: Ausdruck wurde nicht als konstant ausgewertet" und Letzterer zeigt "Fehler beim Aufruf eines Funktionsaufrufs muss in einem konstanten Ausdruck konstant sein") Aufruf von maxAlignment in static_assert ).

Aber MSVC 2015 Update 1 kompiliert den folgenden Code, während Intel C ++ 16.0.2 nicht :

%Vor%

(MSVC kann daher static_assert verarbeiten, wenn es sich in einem template Klassenkörper befindet)

Aber der folgende Code wird von beiden Compilern erfolgreich kompiliert ( static_assert befindet sich außerhalb eines Klassenkörpers; er erscheint in einem Blockbereich):

%Vor%

Meine Frage ist : Habe ich etwas übersehen oder ist der Fehler des Intel C ++ Compilers?

    
Ruslan Garipov 03.03.2016, 05:39
quelle

1 Antwort

1

Wenn ich mich recht erinnere, können die conetexpr-Funktionen erst verwendet werden, wenn sie vollständig definiert sind und die Klassen-constexpr-Funktionen undefiniert sind, bis die Klasse definiert ist und die constexpr-Elementfunktion innerhalb der Klasse nicht mehr verwendet werden kann. scope static_assert , das genau diese Funktion definiert.

Aber Sie können diese Funktion eigenständig machen (es ist sowieso schon statisch) und es wird den Job machen. Es sollte überall kompilieren.

    
ixSci 03.03.2016, 10:07
quelle

Tags und Links