ios_base :: не имеет кода ()

Я попробовал код из cppreference.com но похоже e.code() не там:

#include <iostream>
#include <system_error> // std::make_error_condition, std::ios_errc
int main () {
std::cin.exceptions (std::ios::failbit|std::ios::badbit);
try {
std::cin.rdbuf(nullptr); // throws
} catch (std::ios::failure& e) {
std::cerr << "Fehler: ";
if (e.code() ==         // <<< ERROR: no e.code() ???
std::make_error_condition(std::io_errc::stream))
std::cerr << "stream\n";
else
std::cerr << "other\n";
}
}

Мой g ++ — 6.2 и g ++ — 5 а также clang-3.9 (на linux) все говорят одинаково:

error: ‘class std::ios_base::failure’ has no member named ‘code’
if (e.code() == std::make_error_condition(std::io_errc::stream))
^~~~

Даже неизменный пример не компилируется для меня

#include <iostream>
#include <fstream>
int main()
{
std::ifstream f("doesn't exist");
try {
f.exceptions(f.failbit);
} catch (const std::ios_base::failure& e)
{
std::cout << "Caught an ios_base::failure.\n"<< "Explanatory string: " << e.what() << '\n'
<< "Error code: " << e.code() << '\n';
}
}

с

$ g++-6 etest.cpp -o etest.x
etest.cpp: In function ‘int main()’:
etest.cpp:12:42: error: ‘const class std::ios_base::failure’ has no member named ‘code’
<< "Error code: " << e.code() << '\n';

Я старался g++-6, g++-5, добавив -std=c++1y, -std=c++98, тот же результат. (последнее нормально, хотя, я считаю).

Который действительно странно, потому что онлайн-компилятор на сайте компилирует его.

Единственный намек на пробежку с -E (Препроцессор):

class ios_base
{
# 246 "/usr/include/c++/6/bits/ios_base.h" 3
public:
# 276 "/usr/include/c++/6/bits/ios_base.h" 3
class failure : public exception
{
public:

Это выглядит как будто failure действительно не происходит из system_error, который бы объяснил почему нет code(), Но почему? Его простая Ubuntu g ++, его g ++ — 6, его C ++ 14 … У меня нет настроек компилятора, ссылок, хаков …

Там, кажется, есть некоторое использование

#if _GLIBCXX_USE_CXX11_ABI

в непосредственной близости. Но это мешает? Если так, то как мне сделать так, чтобы это не мешало?

Кто-нибудь имеет представление о том, что здесь происходит?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]