我对 GCC 和 libstdc++ 的经验很少。尝试在 C++11 中编译一个非常简单的程序,我发现编译器错误看起来 STL 没有为双端队列实现新的 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,或标准 C+11 23.3.3.4 deque 修饰符)
我知道 libstdc++ 还没有完全实现 C++11,但状态页面(http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011)仅建议分配器和传播要求还没有完成。
所以我的问题:
- 实际上 libstdc++ 中没有完整的 C++
std::deque
接口实现,还是我遗漏了什么?(也许我没有使用正确的库版本,或者我在命令行中缺少一些参数;我对 gcc/g++ 没有太多经验)。 - 如果这是我的错误,我该如何解决?