繁体   English   中英

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

[英]Why Clang at Coliru can't compile 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/中包含的文件中矢量: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/中包含的文件中位/移动.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/中包含的文件中向量: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<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:注意:在实例化功能模板时, 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:注意:在函数模板特化的实例化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:注意:在函数模板特化的实例化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:注意:在函数模板特化的实例化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:注意:在实例化功能模板特化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的Clang所包含的库标头,这些库标头本身就是用来进行编程的。 有谁知道哪里出了什么问题以及如何解决这个问题?

我100%都不会为此担心,这只是Coliru的一些怪异之处。 它可以追溯到Clang 3.1,在Wandbox上运行完美

根据捐赠页面 ,您可能可以将此问题报告给[删除的电子邮件地址]。

暂无
暂无

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

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