简体   繁体   English

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

[英]Why Clang at Coliru can't compile vector::push_back?

See it here. 在这里看到它。 The program is very mundane, like that: 该程序非常普通,像这样:

#include <vector>

std::vector<int> bombs;

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

The diagnostics do not make much sense to me: 诊断对我来说没有多大意义:

In file included from main.cpp:1: 在main.cpp包含的文件中:1:

In file included from /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/中包含的文件中矢量:60:

In file included from /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_algobase.h:64:

In file included from /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 / stl_pair.h:59:

In file included from /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/中包含的文件中位/移动.h:55:

/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits:1061:48: error: '_Tp' does not refer to a value /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: note: declared here /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: error: _Up does not refer to a value /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: note: declared here /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: error: expected class name /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/type_traits:1062: 5:错误:预期的类名

 { }; ^ 

In file included from main.cpp:1: 在main.cpp包含的文件中:1:

In file included from /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/中包含的文件中向量: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: error: no member named value in std::is_assignable<int &, int &&> /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<int &, int &&>没有成员命名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: note: in instantiation of function template specialization std::uninitialized_copy<std::move_iterator<int *>, int *> requested here /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/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/../../../../include/c++/8.1.0/bits/stl_uninitialized.h:310:19: note: in instantiation of function template specialization std::__uninitialized_copy_a<std::move_iterator<int *>, int *, int> requested here /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/bits/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/../../../../include/c++/8.1.0/bits/vector.tcc:446:13: note: in instantiation of function template specialization std::__uninitialized_move_if_noexcept_a<int *, int *, std::allocator<int> > requested here /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<int *, int *, std::allocator<int> >此处请求

  = 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: note: in instantiation of function template specialization std::vector<int, std::allocator<int> >::_M_realloc_insert<int> requested here /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<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/../../../../include/c++/8.1.0/bits/stl_vector.h:1091:9: note: in instantiation of function template specialization std::vector<int, std::allocator<int> >::emplace_back<int> requested here /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<int, std::allocator<int> >::emplace_back<int>

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

main.cpp:7:9: note: in instantiation of member function std::vector<int, std::allocator<int> >::push_back requested here main.cpp:7:9:注意:在实例化成员函数std::vector<int, std::allocator<int> >::push_back

 bombs.push_back(42); ^ 

4 errors generated. 产生4个错误。

Same with g++ compiles without any issues. 与g ++相同,编译没有任何问题。 I can't really look at the library headers that Clang at Coliru includes to program for to figure it out myself. 我真的看不到Coliru的Clang所包含的库标头,这些库标头本身就是用来进行编程的。 Does anyone have any ideas what is wrong and how to overcome the issue? 有谁知道哪里出了什么问题以及如何解决这个问题?

I 100% wouldn't worry about this, it's just some weirdness at Coliru. 我100%都不会为此担心,这只是Coliru的一些怪异之处。 It works perfectly at Wandbox , right back to Clang 3.1 它可以追溯到Clang 3.1,在Wandbox上运行完美

According to the donations page , you can probably report this problem to [email address redacted]. 根据捐赠页面 ,您可能可以将此问题报告给[删除的电子邮件地址]。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM