我正在研究为什么这段代码在我的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。
我的相关问题是:
答案 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开始支持它。