• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <ios>

    std::ios_base::failure::コンストラクタ

    explicit failure(const std::string& msg);                                            // (1) C++03 まで
    
    explicit failure(const std::string& msg, const error_code& ec = io_errc::stream);    // (2) C++11 から
    
    explicit failure(const char* msg, const error_code& ec = io_errc::stream);      // (3) C++11 から
    

    概要

    ios_base::failure オブジェクトを構築する。

    効果

    • (1) strcmp(what(), msg.c_str()) == 0 となる ios_base::failure オブジェクトを構築する。
    • (2)、(3) 引数 msgec を用いて基底クラスを構築して、ios_base::failure オブジェクトを構築する。

    C++03 までの例

    #include <iostream>
    
    int main()
    {
      std::ios_base::failure f("error message");
      std::cout << f.what() << std::endl;
    }
    

    出力

    error message
    

    C++11 からの例

    #include <iostream>
    #include <system_error>
    
    int main()
    {
      std::ios_base::failure f1("error message");
      std::cout << f1.what() << std::endl;
      std::ios_base::failure f2("error message", std::make_error_code(std::errc::no_such_file_or_directory));
      std::cout << f2.what() << std::endl;
    }
    

    出力例

    error message: unspecified iostream_category error
    error message: No such file or directory
    

    バージョン

    言語

    • C++98

    処理系

    • Clang: 3.0 , 3.1 , 3.2 , 3.3 , 3.4 , 3.5.0 , 3.6.0 , 3.7.0 , 3.8.0
    • GCC: 4.3.6 , 4.4.7 , 4.5.4 , 4.6.4 , 4.7.3 , 4.8.1 , 4.8.2 , 4.9.0 , 4.9.1 , 4.9.2 , 5.1.0 , 5.2.0 , 6.0.0
    • ICC: ??
    • Visual C++: ??

    備考

    • GCC 5.1.0 以降では、単に C++03 モードにしても strcmp(what(), msg.c_str()) == 0 にはならない。
      マクロ _GLIBCXX_USE_CXX11_ABI0に設定すれば完全に C++03 の挙動になる。
      クラスページのバージョン欄の備考も参照。
    • Clang では、C++03 モードでも strcmp(what(), msg.c_str()) == 0 にはならない。

    参照