re PR libstdc++/39880 (Specialisation is_error_code_enum<errc> should not exist)
2009-04-25 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/39880 PR libstdc++/39881 PR libstdc++/39882 * include/std/system_error (is_error_code_enum<errc>): Remove. (error_condition<>::error_condition(_ErrorCodeEnum,) error_condition<>::operator=(_ErrorCodeEnum)): Use make_error_condition. (error_code<>::error_code(_ErrorCodeEnum,), error_code<>::operator=(_ErrorCodeEnum)): Use make_error_code. * testsuite/19_diagnostics/system_error/39880.cc: New. * testsuite/19_diagnostics/error_condition/modifiers/39881.cc: Likewise. * testsuite/19_diagnostics/error_condition/cons/39881.cc: Likewise. * testsuite/19_diagnostics/error_code/modifiers/39882.cc: Likewise. * testsuite/19_diagnostics/error_code/cons/39882.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_other/char/error_code.cc: Adjust. * testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc: Likewise. * testsuite/19_diagnostics/error_code/cons/1.cc: Likewise. * testsuite/19_diagnostics/error_code/operators/bool.cc: Likewise. * 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: Likewise. * testsuite/19_diagnostics/system_error/cons-1.cc: Likewise. * testsuite/19_diagnostics/system_error/what-4.cc: Likewise. * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. From-SVN: r146780
This commit is contained in:
parent
813b9e7e20
commit
bb81f9a082
@ -51,10 +51,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
template<typename _Tp>
|
||||
struct is_error_code_enum : public false_type { };
|
||||
|
||||
template<>
|
||||
struct is_error_code_enum<errc>
|
||||
: public true_type { };
|
||||
|
||||
/// is_error_condition_enum
|
||||
template<typename _Tp>
|
||||
struct is_error_condition_enum : public false_type { };
|
||||
@ -108,12 +104,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
_GLIBCXX_CONST const error_category& system_category() throw ();
|
||||
_GLIBCXX_CONST const error_category& generic_category() throw ();
|
||||
|
||||
error_code make_error_code(errc);
|
||||
|
||||
/// error_code
|
||||
// Implementation-specific error identification
|
||||
struct error_code
|
||||
{
|
||||
error_code()
|
||||
: _M_value(0), _M_cat(&system_category()) { }
|
||||
: _M_value(0), _M_cat(&system_category()) { }
|
||||
|
||||
error_code(int __v, const error_category& __cat)
|
||||
: _M_value(__v), _M_cat(&__cat) { }
|
||||
@ -121,8 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
template<typename _ErrorCodeEnum>
|
||||
error_code(_ErrorCodeEnum __e,
|
||||
typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type* = 0)
|
||||
: _M_value(static_cast<int>(__e)), _M_cat(&generic_category())
|
||||
{ }
|
||||
{ *this = make_error_code(__e); }
|
||||
|
||||
void
|
||||
assign(int __v, const error_category& __cat)
|
||||
@ -140,10 +137,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,
|
||||
error_code&>::type
|
||||
operator=(_ErrorCodeEnum __e)
|
||||
{
|
||||
assign(static_cast<int>(__e), generic_category());
|
||||
return *this;
|
||||
}
|
||||
{ return *this = make_error_code(__e); }
|
||||
|
||||
int
|
||||
value() const { return _M_value; }
|
||||
@ -192,12 +186,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
|
||||
{ return (__os << __e.category().name() << ':' << __e.value()); }
|
||||
|
||||
error_condition make_error_condition(errc);
|
||||
|
||||
/// error_condition
|
||||
// Portable error identification
|
||||
struct error_condition
|
||||
{
|
||||
error_condition() : _M_value(0), _M_cat(&generic_category()) { }
|
||||
error_condition()
|
||||
: _M_value(0), _M_cat(&generic_category()) { }
|
||||
|
||||
error_condition(int __v, const error_category& __cat)
|
||||
: _M_value(__v), _M_cat(&__cat) { }
|
||||
@ -206,7 +202,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
error_condition(_ErrorConditionEnum __e,
|
||||
typename enable_if<is_error_condition_enum
|
||||
<_ErrorConditionEnum>::value>::type* = 0)
|
||||
: _M_value(static_cast<int>(__e)), _M_cat(&generic_category()) { }
|
||||
{ *this = make_error_condition(__e); }
|
||||
|
||||
void
|
||||
assign(int __v, const error_category& __cat)
|
||||
@ -220,10 +216,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
typename enable_if<is_error_condition_enum
|
||||
<_ErrorConditionEnum>::value, error_condition&>::type
|
||||
operator=(_ErrorConditionEnum __e)
|
||||
{
|
||||
assign(static_cast<int>(__e), generic_category());
|
||||
return *this;
|
||||
}
|
||||
{ return *this = make_error_condition(__e); }
|
||||
|
||||
void
|
||||
clear()
|
||||
|
@ -32,7 +32,7 @@ int main()
|
||||
return 0;
|
||||
}
|
||||
|
||||
// { dg-error "deleted function" "" { target *-*-* } 76 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 72 }
|
||||
// { dg-error "used here" "" { target *-*-* } 31 }
|
||||
// { dg-error "first required here" "" { target *-*-* } 30 }
|
||||
// { dg-excess-errors "copy constructor" }
|
||||
|
@ -37,7 +37,7 @@ int main()
|
||||
VERIFY( e2.category() == cat );
|
||||
|
||||
// 3
|
||||
std::error_code e3(std::errc::operation_not_supported);
|
||||
std::error_code e3(std::make_error_code(std::errc::operation_not_supported));
|
||||
VERIFY( e3.value() == int(std::errc::operation_not_supported) );
|
||||
VERIFY( e3.category() == std::generic_category() );
|
||||
|
||||
|
@ -0,0 +1,60 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <system_error>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
enum my_errc { my_err = 0 };
|
||||
|
||||
class my_error_category_impl
|
||||
: public std::error_category
|
||||
{
|
||||
public:
|
||||
const char* name() const { return ""; }
|
||||
std::string message(int) const { return ""; }
|
||||
} my_error_category_instance;
|
||||
|
||||
std::error_code
|
||||
make_error_code(my_errc e)
|
||||
{
|
||||
return std::error_code(static_cast<int>(e),
|
||||
my_error_category_instance);
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct is_error_code_enum<my_errc>
|
||||
: public true_type {};
|
||||
}
|
||||
|
||||
// libstdc++/39882
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::error_code ec1(my_err);
|
||||
VERIFY( ec1 == make_error_code(my_err) );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <system_error>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
enum my_errc { my_err = 0 };
|
||||
|
||||
class my_error_category_impl
|
||||
: public std::error_category
|
||||
{
|
||||
public:
|
||||
const char* name() const { return ""; }
|
||||
std::string message(int) const { return ""; }
|
||||
} my_error_category_instance;
|
||||
|
||||
std::error_code
|
||||
make_error_code(my_errc e)
|
||||
{
|
||||
return std::error_code(static_cast<int>(e),
|
||||
my_error_category_instance);
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct is_error_code_enum<my_errc>
|
||||
: public true_type {};
|
||||
}
|
||||
|
||||
// libstdc++/39882
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::error_code ec2;
|
||||
ec2 = my_err;
|
||||
VERIFY( ec2 == make_error_code(my_err) );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
@ -34,7 +34,7 @@ int main()
|
||||
}
|
||||
|
||||
// 2
|
||||
std::error_code e2(std::errc::operation_not_supported);
|
||||
std::error_code e2(std::make_error_code(std::errc::operation_not_supported));
|
||||
if (e2)
|
||||
{
|
||||
VERIFY( true );
|
||||
|
@ -27,7 +27,7 @@ int main()
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::error_code e1;
|
||||
std::error_code e2(std::errc::operation_not_supported);
|
||||
std::error_code e2(std::make_error_code(std::errc::operation_not_supported));
|
||||
|
||||
VERIFY( e1 == e1 );
|
||||
VERIFY( !(e1 == e2) );
|
||||
|
@ -27,7 +27,7 @@ int main()
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::error_code e1;
|
||||
std::error_code e2(std::errc::operation_not_supported);
|
||||
std::error_code e2(std::make_error_code(std::errc::operation_not_supported));
|
||||
|
||||
VERIFY( !(e1 != e1) );
|
||||
VERIFY( e1 != e2 );
|
||||
|
@ -0,0 +1,60 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <system_error>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
enum my_errc { my_err = 0 };
|
||||
|
||||
class my_error_category_impl
|
||||
: public std::error_category
|
||||
{
|
||||
public:
|
||||
const char* name() const { return ""; }
|
||||
std::string message(int) const { return ""; }
|
||||
} my_error_category_instance;
|
||||
|
||||
std::error_condition
|
||||
make_error_condition(my_errc e)
|
||||
{
|
||||
return std::error_condition(static_cast<int>(e),
|
||||
my_error_category_instance);
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct is_error_condition_enum<my_errc>
|
||||
: public true_type { };
|
||||
}
|
||||
|
||||
// libstdc++/39881
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::error_condition ec1(my_err);
|
||||
VERIFY( ec1 == make_error_condition(my_err) );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <system_error>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
enum my_errc { my_err = 0 };
|
||||
|
||||
class my_error_category_impl
|
||||
: public std::error_category
|
||||
{
|
||||
public:
|
||||
const char* name() const { return ""; }
|
||||
std::string message(int) const { return ""; }
|
||||
} my_error_category_instance;
|
||||
|
||||
std::error_condition
|
||||
make_error_condition(my_errc e)
|
||||
{
|
||||
return std::error_condition(static_cast<int>(e),
|
||||
my_error_category_instance);
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct is_error_condition_enum<my_errc>
|
||||
: public true_type { };
|
||||
}
|
||||
|
||||
// libstdc++/39881
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::error_condition ec2;
|
||||
ec2 = my_err;
|
||||
VERIFY( ec2 == make_error_condition(my_err) );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
29
libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc
Normal file
29
libstdc++-v3/testsuite/19_diagnostics/system_error/39880.cc
Normal file
@ -0,0 +1,29 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
// Free Software Foundation; either version 3, or (at your option)
|
||||
// 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.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING3. If not see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <system_error>
|
||||
|
||||
// libstdc++/39880
|
||||
void test01()
|
||||
{
|
||||
std::error_code ec;
|
||||
if (ec == std::errc::not_supported)
|
||||
{ }
|
||||
}
|
@ -26,7 +26,8 @@ int main()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
const std::string s("too late: boulangerie out of pain au raisin");
|
||||
const std::error_code e(std::errc::operation_not_supported);
|
||||
const std::error_code
|
||||
e(std::make_error_code(std::errc::operation_not_supported));
|
||||
|
||||
// 1
|
||||
{
|
||||
|
@ -31,7 +31,8 @@ void test01()
|
||||
bool test __attribute__((unused)) = true;
|
||||
std::string s("after nine thirty, this request cannot be met");
|
||||
|
||||
std::system_error obj = std::system_error(std::errc::invalid_argument, s);
|
||||
std::system_error obj =
|
||||
std::system_error(std::make_error_code(std::errc::invalid_argument), s);
|
||||
std::string s1(obj.what());
|
||||
std::string s2(obj.what());
|
||||
VERIFY( s1 == s2 );
|
||||
|
@ -32,7 +32,7 @@ void test()
|
||||
|
||||
char buf[64];
|
||||
error_code e1;
|
||||
error_code e2(errc::bad_address);
|
||||
error_code e2(make_error_code(errc::bad_address));
|
||||
string s, s1, s2;
|
||||
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
// { dg-options "-std=gnu++0x" }
|
||||
|
||||
// Copyright (C) 2007, 2009 Free Software Foundation
|
||||
// Copyright (C) 2007, 2008, 2009 Free Software Foundation
|
||||
//
|
||||
// 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
|
||||
@ -32,7 +32,7 @@ void test()
|
||||
|
||||
wchar_t buf[64];
|
||||
error_code e1;
|
||||
error_code e2(errc::bad_address);
|
||||
error_code e2(make_error_code(errc::bad_address));
|
||||
wstring s, s1, s2;
|
||||
|
||||
{
|
||||
|
@ -44,7 +44,8 @@ void test01()
|
||||
}
|
||||
catch (const std::system_error& ex)
|
||||
{
|
||||
VERIFY( ex.code() == std::error_code(std::errc::operation_not_permitted) );
|
||||
VERIFY( ex.code() == std::make_error_code
|
||||
(std::errc::operation_not_permitted) );
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
@ -80,8 +81,8 @@ void test02()
|
||||
}
|
||||
catch (const std::system_error& ex)
|
||||
{
|
||||
VERIFY( ex.code() == std::error_code(
|
||||
std::errc::resource_deadlock_would_occur) );
|
||||
VERIFY( ex.code() == std::make_error_code
|
||||
(std::errc::resource_deadlock_would_occur) );
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user