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

Posted

技术标签:

【中文标题】如何使用 C++ 概念(“concepts lite”)支持构建 gcc?【英文标题】:How do I build gcc with C++ concepts ("concepts lite") support? 【发布时间】:2015-05-17 18:02:22 【问题描述】:

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

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

【问题讨论】:

应该标记为“FAQ”吗? 元效果来源:meta.***.com/questions/294659/… 自从我看到一个新的近距离投票:有人可以告诉我现在这个问题有什么问题吗?它当然不会问“找到我……”的问题,正如当前的接近投票所表明的那样(原始版本也没有,特别是考虑到发布的答案已经找到了该工具)。我真的认为答案中的信息,我会把问题改成可以接受的。 选民可能没有仔细阅读您的更新。 除非您了解 C++ 标准化过程的工作原理、什么是 TS 以及为什么拥有可用于尝试 TS 中的更改的工具很重要,否则请不要投票/要求关闭在它被标准化并强制所有用户使用之前在它成为标准并刻在石头上之前,能够使用可用于检测 TS 中的不一致的工具是最重要的。对于任何对 C++ 标签感兴趣的人来说,这是主题 【参考方案1】:

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

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

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

【讨论】:

你好 Yakk,gcc“有”概念真是太好了。我想知道你是否可以帮助我(plz)。我遵循了here 中提到的所有说明,并从其最新版本(5.3)构建了 gcc,但带有概念的源代码无法编译(例如this)。我使用了-std=c++1z 标志,但看起来你正在谈论一个更新的版本。你能帮我下载吗? 从 gcc 6.1(27-04-2106 发布)开始,可以使用 -fconcepts 启用概念。 -std=c++1z 不再合适,因为概念在 TS 中,目前不太可能合并到 C++17 中(TS 工具允许在标准化之前获得实施经验)。【参考方案2】:

根据 Andrew Sutton 的说法,Concepts Lite 工作的 git 镜像已完全过时,不应使用。 gcc 实现“concepts-lite”的 svn 存储库中有一个概念分支(C++11 之前的努力将概念添加到 C++,但被放弃了;开始使用向 C++ 添加概念的新努力名称概念精简版)。构建起来相当简单(假设您已经安装了最近的 gcc 及其依赖的软件包;请参阅 gcc 安装说明了解您可能想要传递的其他选项:以下说明对我有用,除了我明确指出 @987654325 @在安装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 确实存在,但似乎无条件地做一些与启用概念精简版不同的事情。相反,在启用概念的情况下进行编译时,您将使用 -std=c++1z 选项。

【讨论】:

读者注意:“concepts-lite”是当前 C++ 的“Concepts”扩展的工作名称,以区别于过去十年中现已废弃的概念工作(称为如果需要区分,则为“0x-concepts”)。 @LokiAstari:当我向人们询问 gcc 中的概念支持时,一般的说法是它将“很快”合并,但没有给出具体日期。这个问题的主要目的是了解我需要了解如何掌握启用概​​念的 gcc。 @LokiAstari:人们需要开始使用它来获得经验(这个问题与此非常相关),以便可以测试驱动和解决方法。 Bjarne 希望(或者更确切地说,以某种方式确定)这是在 C++17 中,但还有其他人对此表示担忧。使用工具进行实际试驾对于语言的发展很重要,而结束这个问题是一个可悲且毫无帮助的问题。 gcc的concepts分支已经合并到trunk。 这个答案需要更新以记录 gcc 6.1 的行为。

以上是关于如何使用 C++ 概念(“concepts lite”)支持构建 gcc?的主要内容,如果未能解决你的问题,请参考以下文章

初始c++——基础语法的详细讲解

C++入门基础预备知识

UE4 C++如何使用C++接口

如何在 C++ 中播放声音 [关闭]

新手C++教程1.1:C++简介

基础为零?如何将 C++ 编译成 WebAssembly