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++-concepts从GCC的git镜,但没有编制.如何构建和使用上述[草案] 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)
Die*_*ühl 26
根据Andrew Sutton的说法,Concepts Lite工作的git镜像完全过时了,不应该使用.在svn存储库中有一个概念分支,用于实现"concepts-lite"的gcc(有一个预先C++ 11的工作,将概念添加到C++中,这已被放弃;使用名称开始向C++添加概念的新工作概念精简版).构建起来相当简单(假设你已经有了一个最近的gcc以及它依赖于安装的软件包;请参阅gcc install指令,了解你可能要传递的其他选项:下面的说明对我有用,除了我明确指出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
Run Code Online (Sandbox Code Playgroud)
不完全明显的是如何实际使用概念:选项-fconcepts确实存在,但似乎无条件地做了一些不同于启用概念 - 精简的东西.相反,-std=c++1z在启用概念进行编译时,您将使用该选项.