43

C++ 标准委员会正在制定概念扩展的 TS(技术规范):“编程语言 - 概念的 C++ 扩展”。N4377是本文档的最新版本。为了包含在 C++ 标准功能中,要求实现,理想情况下是可公开访问的系统。

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

4

2 回答 2

30

截至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)

于 2015-08-26T15:25:32.307 回答
26

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

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确实存在,但似乎无条件地做一些与启用概念精简版不同的事情。相反,您将在-std=c++1z启用概念的情况下进行编译时使用该选项。

于 2015-05-17T18:02:22.547 回答