2016-07-20 13 views
1

Wie kann ich das Vorhandensein der Konzepte TS mit GCC 6.1 erkennen?Erkennen der Konzepte TS mit GCC 6.1

This page schlägt vor, dass das Makro __cpp_experimental_concepts in einer TS-unterstützenden Implementierung von Concepts vordefiniert sein sollte. Allerdings stellt das folgende Testprogramm ohne Fehler auf GCC 6.1 mit der -fconcepts Flagge:

#ifdef __cpp_experimental_concepts 
static_assert(false, "Concepts TS found"); 
#endif 

template <typename T> 
concept bool Identity = true; 

int main() {} 

(. Ich würde erwarten, entweder die static_assert abzufeuern oder concept Stichwort unerkannt gehen)

Weiß jemand, einer anderen Methode zum bedingten Kompilieren von Code basierend darauf, ob Konzepte verfügbar sind?

+3

Sie können das Makro mit echo | finden g ++ -E -dM -fconcepts -x C++ - | fgrep concepts' –

Antwort

4

Die richtige Makro ist __cpp_concepts für GCC:

#ifdef __cpp_concepts 
static_assert(false, "Concepts TS found"); 
#endif 

Nach this, der Name des Makros wurde kürzlich in einem Entwurf geändert.

Der richtige Name ist aus dem GCC support page (dank Jonathan Wakely), aber die linked draft (2015.02.09) erfordert noch __cpp_experimental_concepts (was seltsam ist ...). In diesem more recent draft (2015-09-25) wurde der Name jedoch tatsächlich in __cpp_concepts geändert.

+0

Seltsam, dass es nicht länger als experimentell betrachtet wird, wenn man bedenkt, dass es immer noch ein TS ist, aber genau das habe ich gebraucht - vielen Dank für die schnelle Antwort. –

+4

Das Makro und sein offizieller Wert sind dokumentiert unter https://gcc.gnu.org/projects/cxx-status.html#tses (g ++ scheint es vorerst auf 201500 und nicht auf 201507 zu setzen) –

+0

@JonathanWakely Sieht so aus als gäbe es ein Inkonsistenz hier, da dieser Wert aus einem alten Entwurf stammt, in dem '__cpp_experimentelle_Konzepte' noch verwendet wurde. – Holt