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);
该标准不要求实现支持除 char
和 wchar_t
之外的任何类型的流。
[iostreams.limits.pos]
在子句 27 的类中,名称为
charT
的模板参数表示包含char
、wchar_t
和任何其他实现定义的字符类型的类型集的成员,这些类型类型满足可以实例化任何 iostream 组件的字符的要求。
此外,它也不需要用于从流中提取整数和浮点数的分面来处理char16_t
:
[类别.数字]
22.4.2子条款中用于
num_put
和num_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
的模板参数表示包含以下内容的类型集char
、wchar_t
和任何其他实现定义的字符类型,这些字符类型满足可以实例化任何 iostream 组件的字符的要求。
该标准仅要求char_traits
(因此basic_string
)和codecvt
正常工作,用于char16_t
和char32_t
。
因此,为了使您的函数正常工作,您基本上需要定义库未提供的所有缺失部分的专用化。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'