如何使用C++概念("concepts lite")支持构建gcc?

Die*_*ühl 39 c++ g++ generic-programming c++-concepts c++17

C++标准委员会正在研究概念扩展的TS(技术规范):"Programming Languages - C++ Extensions for Concepts".N4377是本文档的最新版本.为了包含在C++标准中,要求实现功能,理想情况是可公开访问的系统.

我知道概念-gcc,但上面的概念提议(通俗地称为Concepts Lite)是不同的.我听说有一个概念的分支,我已经尝试了origin/asutton/c++-conceptsGCCgit镜,但没有编制.如何构建和使用上述[草案] TS中指定的gcc支持概念版本?

Yak*_*ont 29

截至星期五,2015年8月7日01:44:49 -0400(05:44 +0000)概念支持已合并到gcc的主干中.

在此之后使用构建,您可以使用-std=c++1z标志启用概念支持.

从gcc 6.1(27-04-2016)开始,概念由-fconcepts启用,因为它们不太可能包含在C++ 17中,因此它们已被删除-std=c++1z.(通过以下评论中的@BruceAdams)

  • 从gcc 6.1(发布于27-04-2106)开始,可以使用-fconcepts启用概念.-std = c ++ 1z不再适用,因为TS中的概念目前不太可能合并到C++ 17中(TS工具允许在标准化之前获得实现经验). (4认同)

Die*_*ühl 26

根据Andrew Sutton的说法,Concepts Lite工作的git镜像完全过时了,不应该使用.在svn存储库中有一个概念分支,用于实现"concepts-lite"的gcc(有一个预先C++ 11的工作,将概念添加到C++中,这已被放弃;使用名称开始向C++添加概念的新工作概念精简版).构建起来相当简单(假设你已经有了一个最近的gcc以及它依赖于安装的软件包;请参阅gcc install指令,了解你可能要传递的其他选项:下面的说明对我有用,除了我明确指出configure了其中位置GMP,MPCMPFR安装):

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
Run Code Online (Sandbox Code Playgroud)

不完全明显的是如何实际使用概念:选项-fconcepts确实存在,但似乎无条件地做了一些不同于启用概念 - 精简的东西.相反,-std=c++1z在启用概念进行编译时,您将使用该选项.

  • gcc的概念分支已合并到主干. (10认同)
  • @LokiAstari:人们需要开始玩它来获得经验(这个问题与此非常相关),因此这种方法可以通过测试驱动和解决.Bjarne希望(或者更确切地说是确定)这个在C++ 17中,但还有其他人担心.能够访问一个工具来进行实际的试驾对于语言的演变来说是非常重要的**,关闭这个问题是一件令人伤心且无益的事情. (3认同)
  • 读者注意:"concepts-lite"是C++当前"概念"扩展的工作标题,以区别于过去十年中现在被抛弃的概念(如果区别,则称为"0x-概念")是必须的). (2认同)
  • 需要更新此答案以记录gcc 6.1行为. (2认同)