繁体   English   中英

GCC 4.8和char16_t流-错误?

[英]GCC 4.8 and char16_t streams - bug?

这是libstdc ++错误吗?

#include <string>
#include <sstream>

using namespace std;

int main() {
        basic_string<char16_t> str(u"0.0");
        basic_stringstream<char16_t> sstr(str);
        double x = 9;
        sstr >> x;
}

在GCC 4.8 Linux x86_64下的输出:

$ ./main
terminate called after throwing an instance of 'std::bad_cast'
  what():  std::bad_cast
Aborted (core dumped)

编辑有人可以建议一种使此功能在GCC 4.9下工作而不改变其签名的方法:

template<typename T>
T fromString(std::basic_stringstream<char16_t>& stream)
{
    T v;
    stream >> v;
    return v;
}

典型用途是:

std::basic_string<char16_t> string(...);
std::basic_stringstream<char16_t> sstream(string);
double v = fromString<double>(sstream);

该标准不需要实现支持除charwchar_t之外的任何类型的流。

[iostreams.limits.pos]

在第27章的类中,名称为charT的模板参数表示包含charwchar_t以及可以满足任何iostream组件可以满足的字符要求的其他实现定义的字符类型的类型集合的成员。实例化。

另外,它也不需要用于提取整数和从流中浮点的方面来与char16_t使用:

[category.numeric]

22.4.2小节中有关num_putnum_get的成员函数的所有规范仅适用于表81和82(22.3.1.1.1)所需的专业化,即num_get<char>num_get<wchar_t>num_get<C, InputIterator>num_put<char>num_put<wchar_t>num_put<C,OutputIterator>

其中C

名称为C模板参数表示包含charwchar_t和满足实现可在其上实例化任何iostream组件的字符的要求的任何其他实现定义的字符类型的类型集。

该标准仅要求char_traits (以及basic_string )和codecvt可以对char16_tchar32_t正常工作。

因此,要使您的函数正常工作,您基本上需要定义该库未提供的所有缺失片段的专业化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM