代码之家  ›  专栏  ›  技术社区  ›  Öö Tiib

为什么coliru的clang不能编译vector::push_back?

  •  0
  • Öö Tiib  · 技术社区  · 6 年前

    See it here. 这个节目很平常,就像这样:

    #include <vector>
    
    std::vector<int> bombs;
    
    int main()
    {
        bombs.push_back(42); // compile errors
    }
    

    诊断对我来说没有多大意义:

    在主.cpp:1中包含的文件中:

    包含在文件中 /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//../…/Cyp/C++/1.1.0/向量:60:

    包含在文件中 /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//…//I/C++/81.0/BIT/STLYALGOBASE。H:64:

    包含在文件中 /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//..…//I/C++/81.0/BIT/STLLY对。H:59:

    包含在文件中 /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//..…/Cyp/C++/81.0/BIT/MODE。H:55:

    /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//..…//Cyp+/C++/1.1.0/ Type特征:1061:48:错误:'-Tp’不指值。

      : public __bool_constant<__is_assignable(_Tp, _Up)>
                                               ^
    

    /Ur/Pr/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//..…//Cyp+/C++/1.1.0/ Type特征:1059:21:注:这里声明

    template<typename _Tp, typename _Up>
                      ^
    

    /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//..…//Cyp+/C++/1.1.0/ Type特征:1061:53:错误: _Up 不引用值

      : public __bool_constant<__is_assignable(_Tp, _Up)>
                                                    ^
    

    ……

    template<typename _Tp, typename _Up>
                                    ^
    

    /Ur/Primult/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//….. /Cyp+/C++/1.1.0/ Type特征:1062:5: 错误:需要类名

    { };
    ^
    

    在主.cpp:1中包含的文件中:

    包含在文件中 /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//../…/Cyp/C++/1.1.0/向量:63:

    /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//…/…//C++/81.0/BIT/STLLY未初始化。H:128:70: 错误:没有名为的成员 value 在里面 std::is_assignable<int &, int &&>

      const bool __assignable = is_assignable<_RefType2, _RefType1>::value;
                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    

    /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//..…//Cyp+/C++/1.1.0/BIT/STLIL未初始化。H:899:19: 注意:在函数模板专门化的实例化中 std::uninitialized_copy<std::move_iterator<int *>, int *> 请求 在这里

    { return std::uninitialized_copy(__first, __last, __result); }
                  ^
    

    /: 注意:在函数模板专门化的实例化中 std::__uninitialized_copy_a<std::move_iterator<int *>, int *, int> 此处请求

      return std::__uninitialized_copy_a
                  ^
    

    /Ur/Prime/BI///LIb/Gcc/X86Y-64-PC-LIUX-GNU/81.0..…//..…/Cyp+/C++/1.1.0/BITS/Vector .TCC:46:13:注释:在函数模板专用化的实例化中 std::__uninitialized_move_if_noexcept_a<int *, int *, std::allocator<int> > 此处请求

            = std::__uninitialized_move_if_noexcept_a
                   ^
    

    /Ur/Prime/Bi///LIb/Gcc/X86Y-64-PC-LIUX-GNU/81.0/…//..…//Cyp+/C++/1.1.0/BIT/Vector。 注意:在函数模板专门化的实例化中 std::vector<int, std::allocator<int> >::_M_realloc_insert<int> 此处请求

          _M_realloc_insert(end(), std::forward<_Args>(__args)...);
          ^
    

    /Ur/Prime/BI///LIB/GCC/X86Y-64-PC-LIUX-GNU/81.0/…//…//Cyp/C++/81.0/BIT/STLY矢量。H:1091:9: 注意:在函数模板专门化的实例化中 std::vector<int, std::allocator<int> >::emplace_back<int> 请求 在这里

      { emplace_back(std::move(__x)); }
        ^
    

    main.cpp:7:9:注意:在成员函数的实例化中 std::vector<int, std::allocator<int> >::push_back 此处请求

    bombs.push_back(42);
          ^
    

    产生4个错误。

    与g++一样,编译时没有任何问题。我真的看不到 库头在coliru的叮当声中包括编程以便自己解决。有人知道什么是错误的,以及如何克服这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   catnip    6 年前

    我100%不会担心这个,这只是在科林的一些奇怪。它在 Wandbox ,回到Clang 3.1

    根据 donations page ,您可能可以将此问题报告给[编辑的电子邮件地址]。

    推荐文章