Подтвердить что ты не робот

Как я могу построить gcc с концепциями С++ ( "concept lite" )?

Комитет по стандартам С++ работает над расширением TS (Техническая спецификация) для расширений Concepts: "Языки программирования - Расширения С++ для концепций". N4377 - последняя версия этого документа. Для включения в стандарт С++ предлагается реализовать функции, идеально подходящие для общедоступной системы.

Я знаю concept-gcc, но предложение концепций выше (в разговорной речи называется Concepts Lite) отличается. Я слышал, что есть ветка понятий, и я попробовал зеркало origin/asutton/c++-concepts из gcc git, но это не скомпилировалось. Как создать и использовать версию gcc-поддерживающих концепций, как указано в выше [draft] TS?

4b9b3361

Ответ 1

По словам Эндрю Саттона, зеркало git работы Concepts Lite полностью устарело и не должно использоваться. В svn-репозитории существует ветвь понятий для gcc, реализующая "concept-lite" (было предпринято предварительное тестирование С++ 11 добавьте концепции на С++, который был оставлен, новая попытка добавить концепции в С++ была запущена с использованием именных понятий lite). Достаточно просто построить (предположим, что у вас уже есть последний gcc и пакеты, от которых он зависит от установленного, см. Инструкцию по установке gcc для других параметров, которые вы, возможно, захотите передать: приведенные ниже инструкции работали для меня, за исключением того, что я явно указал configure в местах, где gmp, mpc, и mpfr):

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

Что не совсем очевидно, так это то, как на самом деле использовать понятия: опция -fconcepts существует, но, по-видимому, безоговорочно делает что-то отличное от включения понятий-lite. Вместо этого вы должны использовать параметр -std=c++1z при компиляции с включенными концепциями.

Ответ 2

От Пт, 7 авг 2015 01:44:49 -0400 (05:44 +0000) поддержка концепций была объединена в gcc ствол.

Используя сборку после этой точки, вы можете включить поддержку понятий с флагом -std=c++1z.

Как и в gcc 6.1 (27-04-2016), концепции включаются с помощью -fconcepts, поскольку они вряд ли будут включены в С++ 17, поэтому они были удалены из -std=c++1z. (через @BruceAdams в комментариях ниже)