我正在研究为什么这段代码可以在我的电脑上编译,电脑上有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。
我的相关问题是:
-
提供与C++14兼容的libstdc++的最早GCC版本是什么?我如何在其他标准中也发现这一点?
-
为什么GCC会宣称它支持C++14的GCC版本,但它附带的libstdc++却不支持?
-
这是否表明gcc编译器可以与其他stdlib实现一起使用?