2007-08-23 18:16:41 +02:00
|
|
|
// <system_error> -*- C++ -*-
|
|
|
|
|
2010-02-10 20:14:33 +01:00
|
|
|
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
2007-08-23 18:16:41 +02:00
|
|
|
//
|
|
|
|
// This file is part of the GNU ISO C++ Library. This library is free
|
|
|
|
// software; you can redistribute it and/or modify it under the
|
|
|
|
// terms of the GNU General Public License as published by the
|
2009-04-09 17:00:19 +02:00
|
|
|
// Free Software Foundation; either version 3, or (at your option)
|
2007-08-23 18:16:41 +02:00
|
|
|
// any later version.
|
|
|
|
|
|
|
|
// This library is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
|
2009-04-09 17:00:19 +02:00
|
|
|
// Under Section 7 of GPL version 3, you are granted additional
|
|
|
|
// permissions described in the GCC Runtime Library Exception, version
|
|
|
|
// 3.1, as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
// You should have received a copy of the GNU General Public License and
|
|
|
|
// a copy of the GCC Runtime Library Exception along with this program;
|
|
|
|
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
|
|
// <http://www.gnu.org/licenses/>.
|
2007-08-23 18:16:41 +02:00
|
|
|
|
2008-04-10 21:02:57 +02:00
|
|
|
/** @file system_error
|
2007-08-23 18:16:41 +02:00
|
|
|
* This is a Standard C++ Library header.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _GLIBCXX_SYSTEM_ERROR
|
|
|
|
#define _GLIBCXX_SYSTEM_ERROR 1
|
|
|
|
|
|
|
|
#pragma GCC system_header
|
|
|
|
|
|
|
|
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
2010-02-10 20:14:33 +01:00
|
|
|
# include <bits/c++0x_warning.h>
|
2008-05-26 04:19:57 +02:00
|
|
|
#else
|
2007-08-23 18:16:41 +02:00
|
|
|
|
|
|
|
#include <bits/c++config.h>
|
2007-09-07 06:18:40 +02:00
|
|
|
#include <bits/error_constants.h>
|
2007-08-23 18:16:41 +02:00
|
|
|
#include <iosfwd>
|
|
|
|
#include <stdexcept>
|
|
|
|
|
|
|
|
_GLIBCXX_BEGIN_NAMESPACE(std)
|
|
|
|
|
|
|
|
class error_code;
|
2008-05-16 23:55:00 +02:00
|
|
|
class error_condition;
|
2007-08-23 18:16:41 +02:00
|
|
|
class error_category;
|
2008-05-16 23:55:00 +02:00
|
|
|
class system_error;
|
|
|
|
|
|
|
|
/// is_error_code_enum
|
2008-07-06 19:38:08 +02:00
|
|
|
template<typename _Tp>
|
2008-05-16 23:55:00 +02:00
|
|
|
struct is_error_code_enum : public false_type { };
|
|
|
|
|
|
|
|
/// is_error_condition_enum
|
2008-07-06 19:38:08 +02:00
|
|
|
template<typename _Tp>
|
2008-05-16 23:55:00 +02:00
|
|
|
struct is_error_condition_enum : public false_type { };
|
|
|
|
|
|
|
|
template<>
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
struct is_error_condition_enum<errc>
|
2008-05-16 23:55:00 +02:00
|
|
|
: public true_type { };
|
2007-08-23 18:16:41 +02:00
|
|
|
|
|
|
|
|
2008-03-26 07:27:35 +01:00
|
|
|
/// error_category
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
class error_category
|
2007-08-23 18:16:41 +02:00
|
|
|
{
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
protected:
|
2009-10-26 20:07:14 +01:00
|
|
|
error_category();
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
virtual ~error_category() { }
|
|
|
|
|
|
|
|
error_category(const error_category&) = delete;
|
|
|
|
error_category& operator=(const error_category&) = delete;
|
2007-08-23 18:16:41 +02:00
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
virtual const char*
|
|
|
|
name() const = 0;
|
|
|
|
|
|
|
|
virtual string
|
|
|
|
message(int) const = 0;
|
|
|
|
|
|
|
|
virtual error_condition
|
|
|
|
default_error_condition(int __i) const;
|
|
|
|
|
|
|
|
virtual bool
|
|
|
|
equivalent(int __i, const error_condition& __cond) const;
|
|
|
|
|
|
|
|
virtual bool
|
|
|
|
equivalent(const error_code& __code, int __i) const;
|
|
|
|
|
|
|
|
bool
|
|
|
|
operator<(const error_category& __other) const
|
|
|
|
{ return less<const error_category*>()(this, &__other); }
|
|
|
|
|
2007-08-23 18:16:41 +02:00
|
|
|
bool
|
|
|
|
operator==(const error_category& __other) const
|
|
|
|
{ return this == &__other; }
|
|
|
|
|
|
|
|
bool
|
|
|
|
operator!=(const error_category& __other) const
|
|
|
|
{ return this != &__other; }
|
|
|
|
};
|
|
|
|
|
2009-10-26 20:07:14 +01:00
|
|
|
inline error_category::error_category() = default;
|
|
|
|
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
// DR 890.
|
2010-02-17 06:43:24 +01:00
|
|
|
_GLIBCXX_CONST const error_category& system_category() throw();
|
|
|
|
_GLIBCXX_CONST const error_category& generic_category() throw();
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2009-04-25 21:00:52 +02:00
|
|
|
error_code make_error_code(errc);
|
|
|
|
|
2010-02-23 16:23:37 +01:00
|
|
|
template<typename _Tp>
|
|
|
|
struct hash;
|
|
|
|
|
2008-03-26 07:27:35 +01:00
|
|
|
/// error_code
|
2008-05-16 23:55:00 +02:00
|
|
|
// Implementation-specific error identification
|
2007-08-23 18:16:41 +02:00
|
|
|
struct error_code
|
|
|
|
{
|
2008-05-16 23:55:00 +02:00
|
|
|
error_code()
|
2009-04-25 21:00:52 +02:00
|
|
|
: _M_value(0), _M_cat(&system_category()) { }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
error_code(int __v, const error_category& __cat)
|
2007-08-23 18:16:41 +02:00
|
|
|
: _M_value(__v), _M_cat(&__cat) { }
|
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
template<typename _ErrorCodeEnum>
|
|
|
|
error_code(_ErrorCodeEnum __e,
|
|
|
|
typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type* = 0)
|
2009-04-25 21:00:52 +02:00
|
|
|
{ *this = make_error_code(__e); }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
|
|
|
void
|
2008-05-16 23:55:00 +02:00
|
|
|
assign(int __v, const error_category& __cat)
|
2007-08-23 18:16:41 +02:00
|
|
|
{
|
|
|
|
_M_value = __v;
|
|
|
|
_M_cat = &__cat;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2008-05-16 23:55:00 +02:00
|
|
|
clear()
|
2009-02-18 08:35:36 +01:00
|
|
|
{ assign(0, system_category()); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
// DR 804.
|
2008-05-16 23:55:00 +02:00
|
|
|
template<typename _ErrorCodeEnum>
|
2008-10-10 14:39:01 +02:00
|
|
|
typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,
|
|
|
|
error_code&>::type
|
2008-05-16 23:55:00 +02:00
|
|
|
operator=(_ErrorCodeEnum __e)
|
2009-04-25 21:00:52 +02:00
|
|
|
{ return *this = make_error_code(__e); }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
|
|
|
int
|
2008-05-16 23:55:00 +02:00
|
|
|
value() const { return _M_value; }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
|
|
|
const error_category&
|
|
|
|
category() const { return *_M_cat; }
|
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
error_condition
|
|
|
|
default_error_condition() const;
|
|
|
|
|
|
|
|
string
|
|
|
|
message() const
|
|
|
|
{ return category().message(value()); }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
2009-05-21 03:12:00 +02:00
|
|
|
explicit operator bool() const
|
|
|
|
{ return _M_value != 0 ? true : false; }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
// DR 804.
|
2007-08-23 18:16:41 +02:00
|
|
|
private:
|
2010-02-23 16:23:37 +01:00
|
|
|
friend class hash<error_code>;
|
|
|
|
|
2007-08-23 18:16:41 +02:00
|
|
|
int _M_value;
|
|
|
|
const error_category* _M_cat;
|
|
|
|
};
|
|
|
|
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
// 19.4.2.6 non-member functions
|
|
|
|
inline error_code
|
|
|
|
make_error_code(errc __e)
|
2009-02-18 08:35:36 +01:00
|
|
|
{ return error_code(static_cast<int>(__e), generic_category()); }
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator<(const error_code& __lhs, const error_code& __rhs)
|
|
|
|
{
|
|
|
|
return (__lhs.category() < __rhs.category()
|
|
|
|
|| (__lhs.category() == __rhs.category()
|
|
|
|
&& __lhs.value() < __rhs.value()));
|
|
|
|
}
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
template<typename _CharT, typename _Traits>
|
|
|
|
basic_ostream<_CharT, _Traits>&
|
|
|
|
operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
|
|
|
|
{ return (__os << __e.category().name() << ':' << __e.value()); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2009-04-25 21:00:52 +02:00
|
|
|
error_condition make_error_condition(errc);
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
/// error_condition
|
|
|
|
// Portable error identification
|
|
|
|
struct error_condition
|
|
|
|
{
|
2009-04-25 21:00:52 +02:00
|
|
|
error_condition()
|
|
|
|
: _M_value(0), _M_cat(&generic_category()) { }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
error_condition(int __v, const error_category& __cat)
|
2008-10-10 14:39:01 +02:00
|
|
|
: _M_value(__v), _M_cat(&__cat) { }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
template<typename _ErrorConditionEnum>
|
|
|
|
error_condition(_ErrorConditionEnum __e,
|
|
|
|
typename enable_if<is_error_condition_enum
|
|
|
|
<_ErrorConditionEnum>::value>::type* = 0)
|
2009-04-25 21:00:52 +02:00
|
|
|
{ *this = make_error_condition(__e); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
void
|
|
|
|
assign(int __v, const error_category& __cat)
|
|
|
|
{
|
|
|
|
_M_value = __v;
|
|
|
|
_M_cat = &__cat;
|
|
|
|
}
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
// DR 804.
|
|
|
|
template<typename _ErrorConditionEnum>
|
|
|
|
typename enable_if<is_error_condition_enum
|
|
|
|
<_ErrorConditionEnum>::value, error_condition&>::type
|
|
|
|
operator=(_ErrorConditionEnum __e)
|
2009-04-25 21:00:52 +02:00
|
|
|
{ return *this = make_error_condition(__e); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
void
|
2008-10-10 14:39:01 +02:00
|
|
|
clear()
|
2009-02-18 08:35:36 +01:00
|
|
|
{ assign(0, generic_category()); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
// 19.4.3.4 observers
|
|
|
|
int
|
|
|
|
value() const { return _M_value; }
|
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
const error_category&
|
|
|
|
category() const { return *_M_cat; }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
string
|
|
|
|
message() const
|
|
|
|
{ return category().message(value()); }
|
|
|
|
|
2009-05-21 03:12:00 +02:00
|
|
|
explicit operator bool() const
|
|
|
|
{ return _M_value != 0 ? true : false; }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
// DR 804.
|
2008-05-16 23:55:00 +02:00
|
|
|
private:
|
|
|
|
int _M_value;
|
2008-10-10 14:39:01 +02:00
|
|
|
const error_category* _M_cat;
|
2008-05-16 23:55:00 +02:00
|
|
|
};
|
|
|
|
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
// 19.4.3.6 non-member functions
|
|
|
|
inline error_condition
|
|
|
|
make_error_condition(errc __e)
|
2009-02-18 08:35:36 +01:00
|
|
|
{ return error_condition(static_cast<int>(__e), generic_category()); }
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
inline bool
|
2008-10-10 14:39:01 +02:00
|
|
|
operator<(const error_condition& __lhs, const error_condition& __rhs)
|
|
|
|
{
|
|
|
|
return (__lhs.category() < __rhs.category()
|
|
|
|
|| (__lhs.category() == __rhs.category()
|
|
|
|
&& __lhs.value() < __rhs.value()));
|
|
|
|
}
|
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
// 19.4.4 Comparison operators
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator==(const error_code& __lhs, const error_code& __rhs)
|
|
|
|
{ return (__lhs.category() == __rhs.category()
|
|
|
|
&& __lhs.value() == __rhs.value()); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator==(const error_code& __lhs, const error_condition& __rhs)
|
2008-05-16 23:55:00 +02:00
|
|
|
{
|
2008-10-10 14:39:01 +02:00
|
|
|
return (__lhs.category().equivalent(__lhs.value(), __rhs)
|
|
|
|
|| __rhs.category().equivalent(__lhs, __rhs.value()));
|
2008-05-16 23:55:00 +02:00
|
|
|
}
|
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator==(const error_condition& __lhs, const error_code& __rhs)
|
2008-05-16 23:55:00 +02:00
|
|
|
{
|
2008-10-10 14:39:01 +02:00
|
|
|
return (__rhs.category().equivalent(__rhs.value(), __lhs)
|
|
|
|
|| __lhs.category().equivalent(__rhs, __lhs.value()));
|
2008-05-16 23:55:00 +02:00
|
|
|
}
|
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator==(const error_condition& __lhs, const error_condition& __rhs)
|
|
|
|
{
|
|
|
|
return (__lhs.category() == __rhs.category()
|
|
|
|
&& __lhs.value() == __rhs.value());
|
|
|
|
}
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator!=(const error_code& __lhs, const error_code& __rhs)
|
|
|
|
{ return !(__lhs == __rhs); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator!=(const error_code& __lhs, const error_condition& __rhs)
|
|
|
|
{ return !(__lhs == __rhs); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
2008-10-10 14:39:01 +02:00
|
|
|
inline bool
|
|
|
|
operator!=(const error_condition& __lhs, const error_code& __rhs)
|
|
|
|
{ return !(__lhs == __rhs); }
|
|
|
|
|
|
|
|
inline bool
|
|
|
|
operator!=(const error_condition& __lhs, const error_condition& __rhs)
|
|
|
|
{ return !(__lhs == __rhs); }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
|
2009-02-21 01:45:21 +01:00
|
|
|
/**
|
|
|
|
* @brief Thrown to indicate error code of underlying system.
|
|
|
|
*
|
|
|
|
* @ingroup exceptions
|
|
|
|
*/
|
2007-08-23 18:16:41 +02:00
|
|
|
class system_error : public std::runtime_error
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
error_code _M_code;
|
|
|
|
|
|
|
|
public:
|
2008-04-10 21:02:57 +02:00
|
|
|
system_error(error_code __ec = error_code())
|
2010-09-16 16:55:37 +02:00
|
|
|
: runtime_error(__ec.message()), _M_code(__ec) { }
|
2008-04-10 21:02:57 +02:00
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
system_error(error_code __ec, const string& __what)
|
2010-09-16 16:55:37 +02:00
|
|
|
: runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { }
|
|
|
|
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
/*
|
|
|
|
* TODO: Add const char* ctors to all exceptions.
|
|
|
|
*
|
|
|
|
* system_error(error_code __ec, const char* __what)
|
2010-09-16 16:55:37 +02:00
|
|
|
* : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { }
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
*
|
|
|
|
* system_error(int __v, const error_category& __ecat, const char* __what)
|
2010-09-16 16:55:37 +02:00
|
|
|
* : runtime_error(__what + (": " + __ec.message())),
|
|
|
|
* _M_code(error_code(__v, __ecat)) { }
|
system_error (is_error_code_enum): Specialize for errc.
2008-10-22 Chris Fairles <cfairles@gcc.gnu.org>
* include/std/system_error (is_error_code_enum): Specialize for errc.
(error_category::error_category): Defaulted and protected.
(error_category::~error_category): New, virtual.
(error_category::error_category(const error_category&),
error_category::operator=(const error_category&)): Deleted.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category): External linkage (DR 890).
(posix_category): Remove.
(generic_category): Add. External linkage (DR 890).
(error_code::error_code<>(_ErrorCodeEnum)): Use generic_category.
(error_code::clear, error_code::operator=<>(_ErrorCodeEnum)): Forward to
error_code::assign, use generic_category.
(error_condition::error_condition,
error_condition::error_condition<>(_ErrorConditionEnum)): Use
generic_category.
(error_condition::clear,
error_condition::operator=<>(_ErrorConditionEnum)): Forward to
error_code::assign, use generic_category.
(make_error_code, make_error_condition): Define in namespace std.
* include/std/mutex (unique_lock<>::lock, unique_lock<>::try_lock,
unique_lock<>::try_lock_until<>(duration),
unique_lock<>::try_lock_for<>(duration)): Replace posix_error with errc.
* src/system_error.cc (system_error_category, generic_error_category):
New.
(gnu_error_category): Remove.
(get_system_category, get_posix_category): Remove (DR 890).
(system_category, generic_category): Define.
* src/functexcept.cc (__throw_system_error): Use generic_category.
* config/abi/pre/gnu.ver: Export system_category and generic_category,
remove get_system_category and get_generic_category (DR 890).
* config/os/generic/error_constants.h (posix_errno): Rename to errc, use
enum class type. Fix spelling.
* config/os/mingw32/error_constants.h (posix_errno): Likewise.
* testsuite/19_diagnostics/error_code/cons/1.cc: Use errc and
generic_category.
* testsuite/19_diagnostics/error_code/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_code/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_code/operators/not_equal.cc: Likewise.
* testsuite/19_diagnostics/error_category/cons/copy_neg.cc: Update
dg-error line numbers.
* testsuite/19_diagnostics/error_condition/cons/1.cc: Use
generic_category.
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Use errc.
* testsuite/19_diagnostics/error_condition/operators/equal.cc: Likewise.
* testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc: New.
* testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc:
Remove using tests since errc is not a namespace.
* testsuite/19_diagnostics/system_error/cons-1.cc: Use errc.
* testsuite/19_diagnostics/system_error/what-4.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc:
Likewise.
* testsuite/30_threads/unique_lock/locking/2.cc: Likewise.
From-SVN: r141297
2008-10-22 17:27:44 +02:00
|
|
|
*/
|
2007-08-23 18:16:41 +02:00
|
|
|
|
2008-05-16 23:55:00 +02:00
|
|
|
system_error(int __v, const error_category& __ecat)
|
2010-09-16 16:55:37 +02:00
|
|
|
: runtime_error(error_code(__v, __ecat).message()),
|
|
|
|
_M_code(__v, __ecat) { }
|
2008-05-16 23:55:00 +02:00
|
|
|
|
|
|
|
system_error(int __v, const error_category& __ecat, const string& __what)
|
2010-09-16 16:55:37 +02:00
|
|
|
: runtime_error(__what + ": " + error_code(__v, __ecat).message()),
|
|
|
|
_M_code(__v, __ecat) { }
|
2007-08-23 18:16:41 +02:00
|
|
|
|
|
|
|
virtual ~system_error() throw();
|
|
|
|
|
|
|
|
const error_code&
|
|
|
|
code() const throw() { return _M_code; }
|
|
|
|
};
|
|
|
|
|
|
|
|
_GLIBCXX_END_NAMESPACE
|
|
|
|
|
functional_hash.h (hash<string>, [...]): Move, per DR 1182 to...
2010-02-22 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/functional_hash.h (hash<string>, hash<wstring>,
hash<u16string>, hash<u32string>, hash<error_code>): Move, per
DR 1182 to...
* include/bits/basic_string.h: ... here.
* include/std/system_error: ... and here, respectively.
* src/hash-aux.cc (hash<long double>::operator()(long double)):
Move definition...
* src/hash_c++0x.cc: ... here, new file.
* src/hash_tr1.cc: ... and here, tweak includes.
* src/compatibility-c++0x.cc (hash, _Fnv_hash): Remove.
* src/Makefile.am: Adjust.
* src/Makefile.in: Regenerate.
* include/std/functional: Include <bits/functexcept.h>.
* include/std/unordered_set: Remove redundant include.
* include/std/unordered_map: Likewise.
* include/tr1/functional_hash.h: Remove spurious trailing semicolon.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Remove
dg-excess.
From-SVN: r156971
2010-02-22 19:07:07 +01:00
|
|
|
#ifndef _GLIBCXX_COMPATIBILITY_CXX0X
|
|
|
|
|
|
|
|
#include <bits/functional_hash.h>
|
|
|
|
|
|
|
|
_GLIBCXX_BEGIN_NAMESPACE(std)
|
|
|
|
|
|
|
|
// DR 1182.
|
|
|
|
/// std::hash specialization for error_code.
|
|
|
|
template<>
|
|
|
|
struct hash<error_code>
|
2010-09-22 19:50:36 +02:00
|
|
|
: public __hash_base<size_t, error_code>
|
functional_hash.h (hash<string>, [...]): Move, per DR 1182 to...
2010-02-22 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/functional_hash.h (hash<string>, hash<wstring>,
hash<u16string>, hash<u32string>, hash<error_code>): Move, per
DR 1182 to...
* include/bits/basic_string.h: ... here.
* include/std/system_error: ... and here, respectively.
* src/hash-aux.cc (hash<long double>::operator()(long double)):
Move definition...
* src/hash_c++0x.cc: ... here, new file.
* src/hash_tr1.cc: ... and here, tweak includes.
* src/compatibility-c++0x.cc (hash, _Fnv_hash): Remove.
* src/Makefile.am: Adjust.
* src/Makefile.in: Regenerate.
* include/std/functional: Include <bits/functexcept.h>.
* include/std/unordered_set: Remove redundant include.
* include/std/unordered_map: Likewise.
* include/tr1/functional_hash.h: Remove spurious trailing semicolon.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Remove
dg-excess.
From-SVN: r156971
2010-02-22 19:07:07 +01:00
|
|
|
{
|
|
|
|
size_t
|
|
|
|
operator()(const error_code& __e) const
|
|
|
|
{
|
hash_bytes.cc: New file...
2010-09-13 Matt Austern <austern@google.com>
* src/hash_bytes.cc: New file, exports _Hash_bytes (a Murmur hash),
and _Fnv_hash_bytes (based on a FNV algorithm).
* src/compatibility-c++0x.cc (hash<string>::operator(),
hash<const string&>::operator(), hash<wstring>::operator(),
hash<const wstring&>::operator(), hash<error_code>::operator()):
Adjust, use _Hash_bytes.
* include/std/system_error (hash<error_code>::operator()): Likewise.
* include/std/thread (hash<thread::id>operator()): Likewise.
* include/std/bitset (hash<bitset>operator()): Likewise.
* include/bits/basic_string.h (hash<string>::operator(),
hash<wstring>::operator(), hash<u16string>::operator(),
hash<u32string>::operator()): Adjust.
* include/bits/vector.tcc (hash<vector<bool>>::operator()): Adjust.
* include/bits/functional_hash.h (_Hash_bytes, _Fnv_hash_bytes):
Declare.
(struct _Hash_impl, struct _Fnv_hash_impl): Add, use _Hash_bytes
and _Fnv_hash_bytes, respectively.
(hash<float>::operator(), hash<double>::operator()): Adjust.
* config/abi/pre/gnu.ver: Add exports.
* src/Makefile.am: Add.
* src/Makefile.in: Regenerate.
From-SVN: r164253
2010-09-13 20:23:56 +02:00
|
|
|
const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
|
|
|
|
return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
|
functional_hash.h (hash<string>, [...]): Move, per DR 1182 to...
2010-02-22 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/functional_hash.h (hash<string>, hash<wstring>,
hash<u16string>, hash<u32string>, hash<error_code>): Move, per
DR 1182 to...
* include/bits/basic_string.h: ... here.
* include/std/system_error: ... and here, respectively.
* src/hash-aux.cc (hash<long double>::operator()(long double)):
Move definition...
* src/hash_c++0x.cc: ... here, new file.
* src/hash_tr1.cc: ... and here, tweak includes.
* src/compatibility-c++0x.cc (hash, _Fnv_hash): Remove.
* src/Makefile.am: Adjust.
* src/Makefile.in: Regenerate.
* include/std/functional: Include <bits/functexcept.h>.
* include/std/unordered_set: Remove redundant include.
* include/std/unordered_map: Likewise.
* include/tr1/functional_hash.h: Remove spurious trailing semicolon.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Remove
dg-excess.
From-SVN: r156971
2010-02-22 19:07:07 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
_GLIBCXX_END_NAMESPACE
|
|
|
|
|
|
|
|
#endif // _GLIBCXX_COMPATIBILITY_CXX0X
|
|
|
|
|
2008-05-26 04:19:57 +02:00
|
|
|
#endif // __GXX_EXPERIMENTAL_CXX0X__
|
|
|
|
|
|
|
|
#endif // _GLIBCXX_SYSTEM_ERROR
|