diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1c871c0fb29..a59c5d6b9b5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2013-05-18 Jonathan Wakely + + * include/std/system_error (error_category::error_category()): LWG + 2145: Declare public and constexpr. + * src/c++11/system_error.cc (error_category::error_category()): Move + definition to ... + * src/c++11/compatibility-c++0x.cc: Here. + 2013-05-18 Jonathan Wakely * include/std/typeindex (type_index::name()): LWG 2144: Add noexcept. diff --git a/libstdc++-v3/include/std/system_error b/libstdc++-v3/include/std/system_error index b63b74e1f93..d66b8714e03 100644 --- a/libstdc++-v3/include/std/system_error +++ b/libstdc++-v3/include/std/system_error @@ -65,11 +65,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /// error_category class error_category { - protected: - error_category() noexcept; - public: - virtual ~error_category() noexcept; +#ifdef _GLIBCXX_COMPATIBILITY_CXX0X + error_category() noexcept; +#else + constexpr error_category() noexcept = default; +#endif + + virtual ~error_category(); error_category(const error_category&) = delete; error_category& operator=(const error_category&) = delete; diff --git a/libstdc++-v3/src/c++11/compatibility-c++0x.cc b/libstdc++-v3/src/c++11/compatibility-c++0x.cc index fc84a5e23ec..64a4a6c0984 100644 --- a/libstdc++-v3/src/c++11/compatibility-c++0x.cc +++ b/libstdc++-v3/src/c++11/compatibility-c++0x.cc @@ -119,6 +119,10 @@ namespace std _GLIBCXX_VISIBILITY(default) }; constexpr bool system_clock::is_monotonic; } // namespace chrono + + // gcc-4.9.0 + // LWG 2145 changes this constructor to constexpr i.e. inline + error_category::error_category() noexcept = default; } #endif diff --git a/libstdc++-v3/src/c++11/system_error.cc b/libstdc++-v3/src/c++11/system_error.cc index 453c6877b03..65dcef3f134 100644 --- a/libstdc++-v3/src/c++11/system_error.cc +++ b/libstdc++-v3/src/c++11/system_error.cc @@ -70,8 +70,6 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION - error_category::error_category() noexcept = default; - error_category::~error_category() noexcept = default; const error_category&