首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++4.9 libstdc++ std::string对C++11中断的支持

g++4.9 libstdc++ std::string对C++11中断的支持
EN

Stack Overflow用户
提问于 2014-08-07 00:01:44
回答 1查看 398关注 0票数 1

有没有人知道libstdc++g++ <= 4.9中是否完全符合C++11(或声称是兼容的)?例如,下面的代码不编译(在clang上编译):

代码语言:javascript
复制
#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)中声明为将迭代器返回到插入的第一个字符

代码语言:javascript
复制
iterator insert(const_iterator p, size_type n, charT c);

但是,在上面的代码中,它返回void。库的std::string部分不兼容吗?我想知道它是否在g++4.10上编译。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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时)

我们可以看这个直播

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25172211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档