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) 引数
msg
とec
を用いて基底クラスを構築して、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_ABI
を0
に設定すれば完全に C++03 の挙動になる。
クラスページのバージョン欄の備考も参照。 - Clang では、C++03 モードでも
strcmp(what(), msg.c_str()) == 0
にはならない。