有没有人知道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重载在21.4.6.4/21 (N3936)中声明为将迭代器返回到插入的第一个字符
iterator insert(const_iterator p, size_type n, charT c);但是,在上面的代码中,它返回void。库的std::string部分不兼容吗?我想知道它是否在g++4.10上编译。
发布于 2015-03-28 22:40:37
N3936是一个C++14草案,对于C++11来说,最接近的草案标准应该是N3337,但是在这种情况下,它仍然有一个返回类型的iterator,所以问题是相同的。
Praetorian在他的评论中提供的链接似乎已经没有信息了,我找不到这个案例的具体bug报告,但是在libstdc++和libc++不同意的相关案例中,C++11是否要求分配器是默认的可构造的,libstdc++和libc++不同意?的问题是一样的。
libstdc++ std::string的实现并不完全符合C++11,但是在这个错误报告中,我们可以看到,在gcc 5.0发布后,应该修复这个问题:
修正GCC 5(当使用新字符串ABI时)
我们可以看这个直播。
https://stackoverflow.com/questions/25172211
复制相似问题