2015-05-17 133 views
35

C++标准委员会正在制定一个概念扩展的TS(技术规范):“编程语言 - 概念的C++扩展”。 N4377是本文档的最新版本。要包含在C++标准中,要求实现功能,理想情况下用于可公开访问的系统。如何用C++概念(“概念精简版”)支持构建gcc?

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

+1

应该被标记为“常见问题”? –

+8

元效应来源:https://meta.stackoverflow.com/questions/294659/should-i-avoid-reviewing-altogether –

+1

@JeffreyBosboom:非常感谢你的指针。这是一个有趣的阅读。这不是我认为我曾经要求找到任何东西,而是为了实施的存在(并给出了“建设性的证据”作为答案),但我已经按照文中建议的方式将问题重新形成为“问题”题外话题。 –

回答

26

根据安德鲁萨顿概念精简版工作的git镜像是完全过时的,不应该使用。在svn repository中有一个用于gcc实现“concepts-lite”的概念分支(在C++之前有一个向C++添加概念的工作,而C++已经被放弃;向C++添加概念的新工作开始使用名称概念精简版)。这是非常直接的构建(假设你已经有一个最近的gcc和它取决于安装的软件包;请参阅gcc install指令,以了解您可能想要传递的其他选项:以下说明适用于我,但我明确指出configure处于其中gmpmpc,并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确实存在,但似乎无条件地做一些事情比让概念不同-lite。相反,编译启用概念时,您会使用-std=c++1z选项。

+2

给读者的提示:“concepts-lite”是C++当前“Concepts”扩展的工作标题,用于区别于过去十年中现在被放弃的概念努力(它被称为“0x-概念”如果区分是必需的)。 –

+0

谢谢。这是赞赏。任何消息,当这将被合并到主线? –

+1

@LokiAstari:当我问人们关于gcc的概念支持时,一般性声明是它会“很快”合并,但没有给出具体的日期。这个问题主要是为了捕捉我需要弄清楚如何获得启用概念的gcc。 –

25

截至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中删除。 (通过@BruceAdams在下面的评论)

+1

你好Yakk,海湾合作委员会“有”概念是伟大的。我想知道你是否可以帮助我(PLZ)。我遵循[在这里]提到的所有说明(http://www.linuxfromscratch.org/blfs/view/svn/general/gcc.html),并从其最新版本(5.3)构建了gcc,但带有概念的源代码无法编译(例如[this](http://melpon.org/wandbox/permlink/xQC9StRPbGlHTV48))。我使用了'-std = C++ 1z'标志,但它看起来像是在谈论更新的版本。你能帮我下载吗? –

+3

从gcc 6.1(发布27-04-2106)开始,概念可以通过-fconcepts来启用。 -std = C++ 1z不再适用,因为概念在目前不太可能被合并到C++ 17中的TS中(TS车辆允许在标准化之前获得实现经验)。 –

+0

@BruceAdams谢谢,更新。 – Yakk