有人知道libstdc++
中的g++ <= 4.9
是否完全符合C ++ 11标准(或声称是)?例如,下面的代码不能编译(在clang上编译):
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
// g++4.9 bug, returns void
// instead, according to the standard N3936 21.4.6.4/21
// should return an iterator (string::iterator or wrapper)
auto x = s.insert(s.begin(), 10,'A');
cout << s << endl;
}
使用std::string::insert
I的重载在21.4.6.4/21(N3936)中声明为将迭代器返回到插入的第一个字符
iterator insert(const_iterator p, size_type n, charT c);
但是在上面的代码中它返回void
。库的std::string
部分是否不合规?我想知道它是否在g ++ 4.10上编译。
答案 0 :(得分:1)
N3936
是C ++ 14草案,对于C ++ 11,最接近的草案标准是N3337,但在这种情况下,它仍然具有iterator
的返回类型,所以问题是一样的。
Praetorian在其评论中提供的链接似乎不再具有该信息,我找不到针对此案例的特定错误报告,但在libstdc++
和libc++
不同意的相关案例中: Does C++11 require allocators to be default constructible, libstdc++ and libc++ disagree?问题是一样的。
libstdc++
std::string
的实施并不完全符合C ++ 11,但在bug report我们可以看到,gcc 5.0
版本应该修复:
已修复GCC 5(使用新字符串ABI时)
我们可以see this live 。