提问者:小点点

为什么Clang at Coliru不能编译Vector::Push_back?


看这里。节目很平淡无奇,像这样:

#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/../../../include/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/../../../include/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/../../../include/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/../../../include/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/../../../include/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/../../include/c++/8.1.0/bits/stl_uninitialized.h:128:70:错误:std::is_assignable中没有名为value的成员

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

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../include/c++/8.1.0/bits/stl_uninitialized.h:289:19:注意:在函数模板specializationstd::uninitialized_copy,int*>的实例化中,此处请求

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

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../include/c++/8.1.0/bits/stl_uninitialized_copy_a,int*,int>在函数模板的实例化中请求

  return std::__uninitialized_copy_a
              ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../include/C++/8.1.0/bits/vector.tcc:446:13:注意:在函数模板专用化的实例化中std::__uninitialized_move_if_noexcept_a;在此处请求>

        = std::__uninitialized_move_if_noexcept_a
               ^

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../include/C++/8.1.0/bits/vector.tcc:109:4:注意:在函数模板专用化std::vector实例化中;在此处请求的>::_M_REALLOC_INSERT

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

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../include/c++/8.1.0/bits/stl_vector.h:1091:9:注意:在函数模板专用化的实例化中std::vector;>::emplace_back在此处请求

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

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

bombs.push_back(42);
      ^

生成4个错误。

G++编译时也一样,没有任何问题。我不能真的去看看Coliru的库头,包括编程的对象,我自己也搞不清楚。有没有人知道哪里出了问题,如何克服这个问题?


共1个答案

匿名用户

我百分之百不会担心这个,只是在科里鲁有些奇怪。它在Wandbox上工作得很好,回到Clang 3.1

根据捐款页面,你可能可以向[电子邮件地址编辑]报告这个问题。