簡體   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