为什么 `wstring_convert` 会抛出一个 range_error?

Why is `wstring_convert` throwing a range_error?

我有 C++ 代码将包含 </code>(<a href="https://en.wiktionary.org/wiki/%F0%9F%9C%86" rel="nofollow noreferrer">ALCHEMICAL SYMBOL FOR AQUA REGIA</a>) 的 <code>string 转换为 u16string:

#include <string>
#include <codecvt>
#include <locale>
using namespace std;

int main() {
    setlocale(LC_ALL, "ru_RU.UTF-8");
    string s = "";

    wstring_convert<codecvt_utf8<char16_t>, char16_t> converter;
    u16string s16 = converter.from_bytes(s);
    return 0;
}

注意,我使用wstring或任何istream

这给了我 std::range_error:

terminate called after throwing an instance of 'std::range_error'
  what():  wstring_convert::from_bytes

但是on ideone this code runs without error.

在使用 -std=c++14.

进行编译时,我收到 g++ 7.2.0 和 clang 4.0.1 的错误

为什么ideone上没有错误,为什么我收到这个错误?


我有 arch linux 4.12.13 和 locale 命令给我:

LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
...
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

你的转换器不应该是这样的吗?

std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;