web-dev-qa-db-fra.com

Comment créer gcc avec le support des concepts C ++ ("concepts lite")?

Le comité des normes C++ travaille sur une extension TS (Spécifications techniques) pour les concepts: "Langages de programmation - Extensions C++ pour les concepts". N4377 est la dernière version de ce document. Pour être inclus dans les fonctionnalités standard C++, il est demandé de les implémenter, idéalement pour un système accessible au public.

Je connais concept-gcc mais la proposition de concepts ci-dessus (familièrement appelée Concepts Lite ) est différente. J'ai entendu dire qu'il y avait une branche concepts et j'ai essayé le Origin/asutton/c++-concepts from gcc 's git miroir mais qui n'a pas compilé. Comment puis-je créer et utiliser une version des concepts de prise en charge de gcc comme spécifié dans le TS [draft] ci-dessus?

40
Dietmar Kühl

Selon Andrew Sutton, le miroir git du travail Concepts Lite est entièrement obsolète et ne devrait pas être utilisé. Il y a une branche concepts dans le dépôt svn pour gcc implémentant "concepts-lite" (il y a eu un effort pré-C++ 11 pour ajouter des concepts au C++ qui a été abandonné; un nouvel effort pour ajouter des concepts en C++ a été lancé en utilisant le nom concepts lite). Il est assez simple à construire (en supposant que vous avez déjà un gcc récent et les packages dont il dépend installés; voir l'instruction d'installation de gcc pour d'autres options que vous voudrez peut-être passer: les instructions ci-dessous ont fonctionné pour moi, sauf que je l'ai explicitement indiqué configure aux emplacements où gmp , mpc et mpfr sont installés):

cd <suitable-directory>
svn checkout svn://gcc.gnu.org/svn/gcc/branches/c++-concepts
mkdir build-concepts
cd build-concepts
../c++-concepts/configure --prefix=<concept-gcc-root> --disable-bootstrap --enable-languages=c,c++
make -j8
make install

Ce qui n'est pas tout à fait évident, c'est comment réellement utiliser les concepts : l'option -fconcepts existe mais semble inconditionnellement faire quelque chose de différent que l'activation de concepts-lite. À la place, vous utiliseriez le -std=c++1z option lors de la compilation avec les concepts activés.

27
Dietmar Kühl

Depuis ven, 7 août 2015 01:44:49 -0400 (05:44 +0000) le support des concepts a été fusionné dans le tronc de gcc.

En utilisant une version après ce point, vous pouvez activer la prise en charge des concepts avec le -std=c++1z drapeau.

Depuis gcc 6.1 (27-04-2016), les concepts sont activés par -fconcepts car il est peu probable qu'ils soient inclus dans C++ 17, ils ont donc été supprimés de -std=c++1z. (via @BruceAdams dans les commentaires ci-dessous)

29