由于哪个版本的GCC支持C ++ 14?

时间:2017-11-14 10:10:06

标签: c++ gcc c++14 standards-compliance

我正在研究为什么这段代码在我的PC上编译有GCC v7.2,但是没有使用我们的工具链的GCC v5.4编译,depsite -std=c++14 -Wpedantic -pedantic-errors被传递:

#include <array>
#include <vector>
#include <tuple>
typedef std::tuple<const char *, const char *, bool> StrStrBool;

const std::vector<StrStrBool> cApIDValidTestValues {
{
    {"str1", "str2", true },
    { "str3", "str4",  false }
}
};

错误是:

<source>:12:1: error: converting to 'std::tuple<const char*, const char*, bool>' from initializer list would use explicit constructor 'constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {const char (&)[5], const char (&)[5], bool}; <template-parameter-2-2> = void; _Elements = {const char*, const char*, bool}]' }; ^

此代码是C ++ 14有效(explanation),因此根据GCC's Standards Support页面 - 显示自GCC v5以来的完整C ++ 14支持 - 我期望GCC v5.4到能够编译它。

但我在网上被告知,这个GCC版本的编译器看起来像是支持C ++ 14,但附带的libstdc ++不符合C ++ 14。

我的相关问题是:

  1. 最早提供符合C ++ 14标准的libstdc ++的GCC版本是什么?我如何找到其他标准?
  2. 为什么GCC会宣传它对gcc版本有C ++ 14支持,但它附带的libstdc ++不支持?
  3. 这是否表明gcc编译器可以与其他stdlib实现一起使用?

1 个答案:

答案 0 :(得分:4)

  

此代码是C ++ 14有效(解释),

不,它不是(&#34;解释&#34;完全不相关)。

  

所以根据GCC的标准支持页面 - 显示自GCC v5以来的完整C ++ 14支持

该页面清楚地显示&#34;有关库实施状态的信息,请参阅this page。&#34;但是......

  

- 我希望GCC v5.4能够编译它。

不,因为5.4没有C ++ 17支持,并且特别是不支持在之后添加到草案C ++标准"Improving pair and tuple"功能 C ++ 14发布了。该功能在2015年5月的会议上得到了C ++委员会的批准,GCC 5.1于2015年4月发布,该功能的变化太过侵入,无法向GCC的稳定版本分支发送。库支持页面显示libstdc ++从GCC 6.1开始支持它。