代码之家  ›  专栏  ›  技术社区  ›  DBedrenko

既然C++14支持GCC的哪个版本?

  •  7
  • DBedrenko  · 技术社区  · 7 年前

    我正在研究为什么这段代码可以在我的电脑上编译,电脑上有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会宣称它支持C++14的GCC版本,但它附带的libstdc++却不支持?
    3. 这是否表明gcc编译器可以与其他stdlib实现一起使用?
    1 回复  |  直到 7 年前
        1
  •  6
  •   Jonathan Wakely    7 年前

    这段代码是C++14有效的(解释),

    不,它不是(那“解释”是完全无关的)。

    该页面明确表示“有关图书馆实施状态的信息,请参见 this page .“然而。。。

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

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