看这里。 该程序非常平凡,例如:
#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/ 中包含的文件中位/stl_algobase.h:64:
在 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/ 中包含的文件中位/stl_pair.h:59:
在 /usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.0/../../../../include/c++/8.1.0/ 中包含的文件中位/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/ 中包含的文件中矢量: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:错误:没有指定
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/../../../../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)); } ^
std::vector<int, std::allocator<int> >::push_back
main.cpp:7:9:注意:在此处请求的成员函数的实例化中bombs.push_back(42); ^
产生 4 个错误。
与 g++ 编译相同,没有任何问题。我真的无法查看 Coliru 的 Clang 包含的库头文件,以便我自己进行编程。有谁知道什么是错的以及如何克服这个问题?