1 // Iostreams base classes -*- C++ -*- 2 3 // Copyright (C) 2014-2015 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 // 26 // ISO C++ 14882:2011: 27.5.3.1.1 Class ios_base::failure 27 // 28 29 #define _GLIBCXX_USE_CXX11_ABI 1 30 #include <ios> 31 32 #if ! _GLIBCXX_USE_DUAL_ABI 33 # error This file should not be compiled for this configuration. 34 #endif 35 36 namespace 37 { 38 struct io_error_category : std::error_category 39 { 40 virtual const char* 41 name() const noexcept 42 { return "iostream"; } 43 44 _GLIBCXX_DEFAULT_ABI_TAG 45 virtual std::string message(int __ec) const 46 { 47 std::string __msg; 48 switch (std::io_errc(__ec)) 49 { 50 case std::io_errc::stream: 51 __msg = "iostream error"; 52 break; 53 default: 54 __msg = "Unknown error"; 55 break; 56 } 57 return __msg; 58 } 59 }; 60 61 const io_error_category& 62 __io_category_instance() noexcept 63 { 64 static const io_error_category __ec{}; 65 return __ec; 66 } 67 68 } // namespace 69 70 namespace std _GLIBCXX_VISIBILITY(default) 71 { 72 _GLIBCXX_BEGIN_NAMESPACE_VERSION 73 74 const error_category& 75 iostream_category() noexcept 76 { return __io_category_instance(); } 77 78 ios_base::failure::failure(const string& __str) 79 : system_error(io_errc::stream, __str) { } 80 81 ios_base::failure::failure(const string& __str, const error_code& __ec) 82 : system_error(__ec, __str) { } 83 84 ios_base::failure::failure(const char* __str, const error_code& __ec) 85 : system_error(__ec, __str) { } 86 87 ios_base::failure::~failure() 88 { } 89 90 const char* 91 ios_base::failure::what() const throw() 92 { return runtime_error::what(); } 93 94 _GLIBCXX_END_NAMESPACE_VERSION 95 } // namespace 96