Ошибка компиляции в списке при использовании С++ 11

Я получаю следующую ошибку при компиляции кода C++ с использованием параметра std=c++11.

In file included from /usr/include/c++/7/list:63:0,
                 from /usr/include/qt4/QtCore/qlist.h:51,
                 from /usr/include/qt4/QtCore/QList:1,

/usr/include/c++/7/bits/stl_list.h:591:68: error: ‘std::is_nothrow_default_constructible<typename std::__cxx11::_List_base<_Tp, _Alloc>::_Node_alloc_type>::value’ is not a type
       noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value)

Код компилируется, если я использую опцию std=c++98! Но мне нужно скомпилировать его с помощью С++ 11.


person Soo    schedule 02.01.2020    source источник
comment
Странный. Это самая первая ошибка и все сообщение об ошибке?   -  person aschepler    schedule 02.01.2020
comment
Вы сделали что-то странное. Какой бы класс ни помещался в список, он не может создать шаблон is_nothrow_default_constructible. Поскольку единственное, что он может сделать, это быть истинным или ложным, что означает, что, вероятно, класс вообще не может быть создан. Нам определенно нужно увидеть больше кода. И обязательно попробуйте сделать небольшую тестовую программу, которая включает только этот один класс, а не весь мусор Qt, и посмотрите, сможет ли она скомпилироваться.   -  person Zan Lynx    schedule 02.01.2020
comment
Мои экстрасенсорные способности подсказывают, что Qt 4, который разрабатывался в период с 2005 по 2011 год, не совместим с C++11.   -  person selbie    schedule 02.01.2020
comment
@ZanLynx Ты был прав. Я использовал SQLiteCpp (github.com/SRombauts/SQLiteCpp), старую версию 0.9.9. Для обнаружения компилятора C++11 они использовали #if (defined(GNUC) && (GNUC ›= 4 && GNUC_MINOR ›= 7 ) && определен(GXX_EXPERIMENTAL_CXX0X)), который не работал должным образом. Я изменил его на #if (__cplusplus ›= 201103L), что устранило ошибку. Спасибо.   -  person Soo    schedule 02.01.2020


Ответы (1)


Как справедливо подозревал ZanLynx, ошибка была вызвана какой-то другой частью кода. Я использовал SQLiteCpp (github.com/SRombauts/SQLiteCpp), старую версию «0.9.9». Для обнаружения компилятора C++11 они использовали #if (defined(GNUC) && (GNUC >= 4 && GNUC_MINOR >= 7 ) && defined(GXX_EXPERIMENTAL_CXX0X)), который не работал должным образом. Я изменил его на #if (__cplusplus >= 201103L), что устранило ошибку. Спасибо, ЗанЛинкс!

person Soo    schedule 02.01.2020