如何使用C++概念(“概念轻量级”)支持构建gcc?

44
C++标准委员会正在制定一个名为“编程语言-C++概念扩展”的TS(技术规范)扩展。 N4377 是该文档的最新版本。为了纳入C++标准,需要实现这些功能,最好是在公开可访问的系统上。
我知道concept-gcc,但上述提议(俗称为Concepts Lite)不同。我听说有一个概念分支,并尝试使用gccgit镜像中的origin/asutton/c++-concepts,但那个版本无法编译。我如何构建和使用支持上述[草案] TS中规定的概念的gcc版本?

8
元效应来源:https://meta.stackoverflow.com/questions/294659/should-i-avoid-reviewing-altogether 我应该完全避免审核吗? - Jeffrey Bosboom
2
自从我看到有一个新的关闭投票:能否有人告诉我现在这个问题有什么问题?它肯定不是一个“找到我…”的问题,正如当前的关闭投票所示(原始版本也没有,特别是考虑到已经发布了找到该工具的答案)。我真的认为答案中的信息很有用,我会改变问题以使其可接受。 - Dietmar Kühl
6
选民可能没有仔细阅读您的更新。 - JasonMArcher
20
请不要在不了解C++标准化流程、什么是TS以及为什么有必要在TS被标准化并强制推行给所有用户之前提供可用的工具来尝试这些更改时,对其进行投票或要求关闭。在TS成为标准并被确定下来之前,拥有可以用于检测不一致性的工具非常重要。对于任何对C++标签感兴趣的人来说,这是一个相关话题。 - David Rodríguez - dribeas
1
顺便提一下,Dietmar 是 C++ 标准化委员会的成员之一,在 Stack Overflow 上活跃了三年以上,声誉远高于平均水平。我相信他对于在 SO 上是否有相关的 C++ 程序员感觉敏锐。 - David Rodríguez - dribeas
显示剩余14条评论
2个回答

31

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

使用此时间点之后的版本构建,您可以使用-std=c++1z标志启用概念支持。

自gcc 6.1(2016年4月27日)起,将概念支持启用通过-fconcepts,因为它们不大可能包含在C++17中,因此已从-std=c++1z中删除。(via @BruceAdams 在下面的评论中)


1
你好Yakk,很高兴gcc“有”概念。我想知道你是否能帮助我(请)。我按照这里提到的所有说明,并从最新版本(5.3)构建了gcc,但是具有概念的源代码无法编译(例如this)。我使用了-std=c++1z标志,但看起来你正在谈论一个更新的版本。你能帮我下载吗? - Lorah Attkins
4
从gcc 6.1(发布于2016年4月27日)开始,可以通过使用“-fconcepts”选项启用概念。因为概念是在技术规范中(TS)中,而目前看来不太可能将其合并到C++17标准中(TS机制允许在标准化之前获得实现经验),所以“-std=c++1z”选项不再适用。 - Bruce Adams

26

根据Andrew Sutton的说法,Concepts Lite工作的git镜像已完全过时,不应使用。在gcc的svn存储库中有一个实现“concepts-lite”的概念分支(曾经有一个针对C ++添加概念的C ++ 11之前努力但被放弃;开始使用概念lite名称添加概念的新尝试)。构建相当简单(假设您已经安装了最新版本的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 确实存在,但似乎无条件地执行与启用 concepts-lite 不同的操作。相反,您需要在启用概念时使用 -std=c++1z 选项进行编译。


2
读者注意: "concepts-lite" 是当前 C++ 的“概念”扩展的工作标题,以区别于上个十年被放弃的概念努力(如果需要区分,则称为“0x-concepts”)。 - Kerrek SB
1
@LokiAstari:当我询问人们有关gcc概念支持的问题时,一般的说法是它很快就会被合并,但没有具体的日期。这个问题主要是为了了解如何获取启用概念的gcc所需的信息。 - Dietmar Kühl
3
@LokiAstari说:人们需要开始使用它并积累经验(这个问题与此非常相关),以便该方法可以进行测试驱动并得到完善。Bjarne希望(或者说他某种程度上决心)将此纳入C++17,但也有其他人担忧。拥有一个实际进行测试驱动的工具对于语言的发展至关重要,关闭这个问题是悲哀且不太有帮助的。 - David Rodríguez - dribeas
10
GCC的"概念分支"已经合并到主干中。 - Eric Niebler
2
这个答案需要更新以记录gcc 6.1的行为。 - Janus Troelsen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接