ios_base :: failure没有代码()

时间:2017-03-11 22:43:57

标签: c++ ios c++11 g++ system-error

我尝试了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++-6g++-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

在附近。但这会干扰吗?如果是这样,我该如何让它不受干扰?

有没有人知道这里会发生什么?

0 个答案:

没有答案