Почему Clang в 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/ вектор: 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. ч: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: note: в экземпляре специализации шаблона функции
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: note: в экземпляре функции-члена
std::vector<int, std::allocator<int> >::push_back
просили здесьbombs.push_back(42); ^
4 ошибки сгенерированы.
То же самое с компиляцией g ++ без проблем. Я не могу смотреть на заголовки библиотек, которые Clang в Coliru включает в программу, чтобы понять это самому. У кого-нибудь есть идеи, что не так и как преодолеть проблему?
1 ответ
Я бы на 100% не беспокоился об этом, это просто странность в Колиру. Он отлично работает на Wandbox, вплоть до Clang 3.1
Согласно странице пожертвований, вы можете сообщить об этой проблеме на [адрес электронной почты отредактирован].