为什么Coliru的Clang无法编译vector :: push_back?

时间:2018-06-16 18:19:59

标签: c++ clang++ coliru

See it here. 该计划非常平凡,就像那样:

#include <vector>

std::vector<int> bombs;

int main()
{
    bombs.push_back(42); // compile errors
}

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

  

main.cpp中包含的文件:1:

     

包含来自的文件   /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/vector:60:

     

包含来自的文件   /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/stl_algobase。 H:64:

     

包含来自的文件   /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/stl_pair。 H:59:

     

包含来自的文件   /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/move。 H:55:

     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 / type_traits :1061:48:错误:'_ Tp'没有引用值

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

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 / type_traits :1059:21:注意:在这里宣布

template<typename _Tp, typename _Up>
                  ^
     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 / type_traits :1061:53:错误:_Up未引用值

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

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 / type_traits :1059:35:注意:在这里宣布

template<typename _Tp, typename _Up>
                                ^
     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 / type_traits :1062:5:   错误:预期的班级名称

{ };
^
     

main.cpp中包含的文件:1:

     

包含来自的文件   /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/vector:63:

     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 /位/stl_uninitialized.h:128:70:   错误:value

中没有名为std::is_assignable<int &, int &&>的成员
  const bool __assignable = is_assignable<_RefType2, _RefType1>::value;
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 /位/stl_uninitialized.h:289:19:   注意:在实例化函数模板专业化   std::uninitialized_copy<std::move_iterator<int *>, int *>请求   这里

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

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 /位/stl_uninitialized.h:310:19:   注意:在实例化函数模板专业化   std::__uninitialized_copy_a<std::move_iterator<int *>, int *, int>   请求

  return std::__uninitialized_copy_a
              ^
     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 /位/vector.tcc:446:13:注意:在这里请求的函数模板特化std::__uninitialized_move_if_noexcept_a<int *, int *, std::allocator<int> >的实例化

        = std::__uninitialized_move_if_noexcept_a
               ^
     

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 /位/vector.tcc:109:4:   注意:在实例化函数模板专业化   std::vector<int, std::allocator<int> >::_M_realloc_insert<int>   请求

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

的/ usr / local / bin中/../ LIB / GCC / x86_64的-PC-Linux的GNU / 8.1.0 /../../../../包括/ C ++ / 8.1.0 /位/stl_vector.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 ++编译相同,没有任何问题。我真的不能看 Clair at Coliru的图书馆标题包括编程以便自己弄清楚。有没有人有任何想法有什么问题以及如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

我100%不会担心这一点,这只是科利鲁的一些奇怪现象。它在Wandbox完美地运行,直到回到Clang 3.1

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