У меня очень мало опыта работы с GCC и libstdc ++. Пытаясь скомпилировать очень простую программу на C ++ 11, я обнаружил ошибки компилятора, которые выглядят так, что STL не реализует новый интерфейс C ++ 11 для deque.
Пример программы:
#include <deque>
int main() {
std::deque<int> c;
std::deque<int> d;
c.insert(c.cbegin(), d.begin(), d.end()); // unable to match insert(const_iterator, iterator, iterator)
auto it=c.insert(c.begin(), d.begin(), d.end()); // unable to match iterator = insert(iterator, iterator, iterator)
}
Запустив следующую командную строку, я получаю ошибку компиляции в закомментированных строках:
g++ -std=c++11 -o test test.cpp
(Установленная версия gcc / libstdc ++ — 4.8.1)
Похоже, STL не реализует:
template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last );
(http://en.cppreference.com/w/cpp/container/deque/insert, или стандартный C + 11 23.3.3.4 модификаторы deque)
Я знаю, что libstdc ++ еще не полностью реализует C ++ 11, но страница состояния (http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011) предполагает, что только требования к распределителю и распространению еще не выполнены.
Итак, мои вопросы:
std::deque
интерфейс в libstdc ++, или я что-то упустил? (возможно, я не использую правильную версию библиотеки, или мне не хватает какого-либо параметра в командной строке; у меня нет слишком большого опыта работы с gcc / g ++).Ваш код действителен и принят libstdc ++ GCC 4.9.0 (и некоторое время тоже принимался libc ++ от clang). Страница статуса, на которую вы ссылаетесь, предупреждает об этом:
На этой странице описана поддержка C ++ 11 в основной GCC SVN, а не в какой-либо конкретной версии.
Поэтому тот факт, что что-то указано как реализованное, не должно подразумевать, что это реализовано в установленной вами версии GCC.