libstdc ++是否实现了C ++ 11 deque接口?

时间:2014-05-05 09:39:46

标签: c++ c++11 stl gcc4.8 g++4.8

我对GCC和libstdc ++的经验很少。试图在C ++ 11中编译一个非常简单的程序我发现看起来STL的编译器错误没有为deque实现新的C ++ 11接口。

示例程序:

#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或std.C + 11 23.3.3.4 deque modifiers)

我知道libstdc ++还没有完全实现C ++ 11,但状态页面(http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011)表明只有分配器和传播要求尚未完成。

所以我的问题:

  • 实际上libstdc ++中没有完整的C ++ std::deque接口实现,或者我错过了什么? (也许我没有使用正确的库版本,或者我在命令行中缺少一些参数;我对gcc / g ++没有太多经验。)
  • 如果是我的错,我怎么办才能解决?

1 个答案:

答案 0 :(得分:4)

你的代码是有效的,并且被GCC 4.9.0的libstdc ++接受(并且已经被clang的libc ++接受了一段时间)。您链接的状态页面会发出警告:

  

此页面描述了主线GCC SVN中的C ++ 11支持,而不是任何特定版本。

所以事实上列出的内容不应该被暗示它是在你已经安装的GCC版本中实现的。