mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-25 17:51:10 +08:00
functional (function): Use explicit operator bool.
2009-05-20 Benjamin Kosnik <bkoz@redhat.com> * include/tr1_impl/functional (function): Use explicit operator bool. * include/bits/shared_ptr.h (__shared_ptr): Same. * include/bits/unique_ptr.h (unique_ptr): Same. * include/std/mutex (unique_lock): Same. * include/std/system_error (error_code): Same. (error_condition): Same. * include/std/ostream (sentry): Same. * include/std/istream (sentry): Same. * testsuite/19_diagnostics/error_condition/operators/bool.cc: Adjust. * testsuite/19_diagnostics/error_condition/operators/bool_neg.cc: Same. * testsuite/19_diagnostics/error_code/operators/bool.cc: Same. * testsuite/19_diagnostics/error_code/operators/bool_neg.cc: Same. * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Same. * testsuite/20_util/unique_ptr/assign/assign_neg.cc: Same. * testsuite/20_util/shared_ptr/observers/bool_conv.cc: Same. From-SVN: r147756
This commit is contained in:
parent
f256c06431
commit
d29d4507b2
@ -1,3 +1,21 @@
|
||||
2009-05-20 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/tr1_impl/functional (function): Use explicit operator bool.
|
||||
* include/bits/shared_ptr.h (__shared_ptr): Same.
|
||||
* include/bits/unique_ptr.h (unique_ptr): Same.
|
||||
* include/std/mutex (unique_lock): Same.
|
||||
* include/std/system_error (error_code): Same.
|
||||
(error_condition): Same.
|
||||
* include/std/ostream (sentry): Same.
|
||||
* include/std/istream (sentry): Same.
|
||||
* testsuite/19_diagnostics/error_condition/operators/bool.cc: Adjust.
|
||||
* testsuite/19_diagnostics/error_condition/operators/bool_neg.cc: Same.
|
||||
* testsuite/19_diagnostics/error_code/operators/bool.cc: Same.
|
||||
* testsuite/19_diagnostics/error_code/operators/bool_neg.cc: Same.
|
||||
* testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: Same.
|
||||
* testsuite/20_util/unique_ptr/assign/assign_neg.cc: Same.
|
||||
* testsuite/20_util/shared_ptr/observers/bool_conv.cc: Same.
|
||||
|
||||
2009-05-19 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* testsuite/23_containers/list/14340.cc: Abstract list type.
|
||||
@ -182,7 +200,7 @@
|
||||
* testsuite/26_numerics/random/piecewise_linear_distribution/cons/
|
||||
initlist_fun.cc: Likewise
|
||||
* testsuite/26_numerics/random/piecewise_linear_distribution/cons/
|
||||
num_xbound_fun.cc: Likewise
|
||||
num_xbound_fun.cc: Likewise
|
||||
|
||||
2009-05-14 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
@ -200,7 +218,7 @@
|
||||
2009-05-14 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* include/bits/random.tcc (cauchy_distribution<>::
|
||||
operator()(_UniformRandomNumberGenerator&, const param_type&)):
|
||||
operator()(_UniformRandomNumberGenerator&, const param_type&)):
|
||||
Avoid M_PI, a glibc extension.
|
||||
|
||||
2009-05-13 Ben Elliston <bje@au.ibm.com>
|
||||
@ -215,7 +233,7 @@
|
||||
|
||||
2009-05-12 Edward Smith-Rowland <3dw4rd@verizon.net>
|
||||
|
||||
* doc/xml/manual/status_cxx200x.xml: Note missing constexpr for
|
||||
* doc/xml/manual/status_cxx200x.xml: Note missing constexpr for
|
||||
random number engines, complex, bitset, array, time utilities, and
|
||||
char_traits.
|
||||
|
||||
|
@ -816,13 +816,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
get() const // never throws
|
||||
{ return _M_ptr; }
|
||||
|
||||
// Implicit conversion to "bool"
|
||||
private:
|
||||
typedef _Tp* __shared_ptr::*__unspecified_bool_type;
|
||||
|
||||
public:
|
||||
operator __unspecified_bool_type() const // never throws
|
||||
{ return _M_ptr == 0 ? 0 : &__shared_ptr::_M_ptr; }
|
||||
explicit operator bool() const // never throws
|
||||
{ return _M_ptr == 0 ? false : true; }
|
||||
|
||||
bool
|
||||
unique() const // never throws
|
||||
|
@ -85,7 +85,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
class unique_ptr
|
||||
{
|
||||
typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
|
||||
typedef __tuple_type unique_ptr::* __unspecified_bool_type;
|
||||
typedef _Tp* unique_ptr::* __unspecified_pointer_type;
|
||||
|
||||
public:
|
||||
@ -181,8 +180,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
get_deleter() const
|
||||
{ return std::get<1>(_M_t); }
|
||||
|
||||
operator __unspecified_bool_type () const
|
||||
{ return get() == 0 ? 0 : &unique_ptr::_M_t; }
|
||||
explicit operator bool() const
|
||||
{ return get() == 0 ? false : true; }
|
||||
|
||||
// Modifiers.
|
||||
pointer
|
||||
@ -233,7 +232,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
class unique_ptr<_Tp[], _Tp_Deleter>
|
||||
{
|
||||
typedef std::tuple<_Tp*, _Tp_Deleter> __tuple_type;
|
||||
typedef __tuple_type unique_ptr::* __unspecified_bool_type;
|
||||
typedef _Tp* unique_ptr::* __unspecified_pointer_type;
|
||||
|
||||
public:
|
||||
@ -323,8 +321,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
get_deleter() const
|
||||
{ return std::get<1>(_M_t); }
|
||||
|
||||
operator __unspecified_bool_type () const
|
||||
{ return get() == 0 ? 0 : &unique_ptr::_M_t; }
|
||||
explicit operator bool() const
|
||||
{ return get() == 0 ? false : true; }
|
||||
|
||||
// Modifiers.
|
||||
pointer
|
||||
|
@ -631,6 +631,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
template<typename _CharT, typename _Traits>
|
||||
class basic_istream<_CharT, _Traits>::sentry
|
||||
{
|
||||
// Data Members.
|
||||
bool _M_ok;
|
||||
|
||||
public:
|
||||
/// Easy access to dependant types.
|
||||
typedef _Traits traits_type;
|
||||
@ -670,11 +673,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
* For ease of use, sentries may be converted to booleans. The
|
||||
* return value is that of the sentry state (true == okay).
|
||||
*/
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
explicit
|
||||
#endif
|
||||
operator bool() const
|
||||
{ return _M_ok; }
|
||||
|
||||
private:
|
||||
bool _M_ok;
|
||||
};
|
||||
|
||||
// [27.6.1.2.3] character extraction templates
|
||||
|
@ -574,7 +574,7 @@ namespace std
|
||||
owns_lock() const
|
||||
{ return _M_owns; }
|
||||
|
||||
/* explicit */ operator bool () const
|
||||
explicit operator bool() const
|
||||
{ return owns_lock(); }
|
||||
|
||||
mutex_type*
|
||||
|
@ -376,7 +376,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
template <typename _CharT, typename _Traits>
|
||||
class basic_ostream<_CharT, _Traits>::sentry
|
||||
{
|
||||
// Data Members:
|
||||
// Data Members.
|
||||
bool _M_ok;
|
||||
basic_ostream<_CharT, _Traits>& _M_os;
|
||||
|
||||
@ -420,6 +420,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
* For ease of use, sentries may be converted to booleans. The
|
||||
* return value is that of the sentry state (true == okay).
|
||||
*/
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
explicit
|
||||
#endif
|
||||
operator bool() const
|
||||
{ return _M_ok; }
|
||||
};
|
||||
|
@ -152,15 +152,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
message() const
|
||||
{ return category().message(value()); }
|
||||
|
||||
// Safe bool idiom.
|
||||
// explicit operator bool() const throw()
|
||||
// { return _M_value != 0; }
|
||||
typedef void (*__bool_type)();
|
||||
|
||||
static void __not_bool_type() { }
|
||||
|
||||
operator __bool_type() const
|
||||
{ return _M_value != 0 ? &__not_bool_type : false; }
|
||||
explicit operator bool() const
|
||||
{ return _M_value != 0 ? true : false; }
|
||||
|
||||
// DR 804.
|
||||
private:
|
||||
@ -233,15 +226,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
message() const
|
||||
{ return category().message(value()); }
|
||||
|
||||
// Safe bool idiom.
|
||||
// explicit operator bool() const throw()
|
||||
// { return _M_value != 0; }
|
||||
typedef void (*__bool_type)();
|
||||
|
||||
static void __not_bool_type() { }
|
||||
|
||||
operator __bool_type() const
|
||||
{ return _M_value != 0 ? &__not_bool_type : false; }
|
||||
explicit operator bool() const
|
||||
{ return _M_value != 0 ? true : false; }
|
||||
|
||||
// DR 804.
|
||||
private:
|
||||
|
@ -1761,6 +1761,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
||||
: public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>,
|
||||
private _Function_base
|
||||
{
|
||||
#ifndef __GXX_EXPERIMENTAL_CXX0X__
|
||||
/// This class is used to implement the safe_bool idiom.
|
||||
struct _Hidden_type
|
||||
{
|
||||
@ -1769,6 +1770,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
||||
|
||||
/// This typedef is used to implement the safe_bool idiom.
|
||||
typedef _Hidden_type* _Hidden_type::* _Safe_bool;
|
||||
#endif
|
||||
|
||||
typedef _Res _Signature_type(_ArgTypes...);
|
||||
|
||||
@ -1918,6 +1920,10 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
||||
*
|
||||
* This function will not throw an exception.
|
||||
*/
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
explicit operator bool() const
|
||||
{ return !_M_empty(); }
|
||||
#else
|
||||
operator _Safe_bool() const
|
||||
{
|
||||
if (_M_empty())
|
||||
@ -1925,6 +1931,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
|
||||
else
|
||||
return &_Hidden_type::_M_bool;
|
||||
}
|
||||
#endif
|
||||
|
||||
// [3.7.2.4] function invocation
|
||||
|
||||
|
@ -28,14 +28,14 @@ int main()
|
||||
|
||||
// 1
|
||||
std::error_code e1;
|
||||
if (e1)
|
||||
if (static_cast<bool>(e1))
|
||||
{
|
||||
VERIFY( false );
|
||||
}
|
||||
|
||||
// 2
|
||||
std::error_code e2(std::make_error_code(std::errc::operation_not_supported));
|
||||
if (e2)
|
||||
if (static_cast<bool>(e2))
|
||||
{
|
||||
VERIFY( true );
|
||||
}
|
||||
|
@ -30,4 +30,4 @@ int main()
|
||||
return i;
|
||||
}
|
||||
|
||||
// { dg-error "invalid conversion" "" { target *-*-* } 28 }
|
||||
// { dg-error "could not convert" "" { target *-*-* } 28 }
|
||||
|
@ -27,14 +27,14 @@ void test01()
|
||||
|
||||
// 1
|
||||
std::error_condition e1;
|
||||
if (e1)
|
||||
if (static_cast<bool>(e1))
|
||||
{
|
||||
VERIFY( false );
|
||||
}
|
||||
|
||||
// 2
|
||||
std::error_condition e2(std::errc::operation_not_supported);
|
||||
if (e2)
|
||||
if (static_cast<bool>(e2))
|
||||
{
|
||||
VERIFY( true );
|
||||
}
|
||||
|
@ -29,4 +29,4 @@ int test01()
|
||||
return i;
|
||||
}
|
||||
|
||||
// { dg-error "invalid conversion" "" { target *-*-* } 27 }
|
||||
// { dg-error "could not convert" "" { target *-*-* } 27 }
|
||||
|
@ -33,9 +33,9 @@ test01()
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
const std::shared_ptr<A> p1;
|
||||
VERIFY( p1 == false );
|
||||
VERIFY( static_cast<bool>(p1) == false );
|
||||
const std::shared_ptr<A> p2(p1);
|
||||
VERIFY( p2 == false );
|
||||
VERIFY( static_cast<bool>(p2) == false );
|
||||
}
|
||||
|
||||
void
|
||||
@ -44,12 +44,12 @@ test02()
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
std::shared_ptr<A> p1(new A);
|
||||
VERIFY( p1 );
|
||||
VERIFY( static_cast<bool>(p1) );
|
||||
std::shared_ptr<A> p2(p1);
|
||||
VERIFY( p2 );
|
||||
VERIFY( static_cast<bool>(p2) );
|
||||
p1.reset();
|
||||
VERIFY( !p1 );
|
||||
VERIFY( p2 );
|
||||
VERIFY( !static_cast<bool>(p1) );
|
||||
VERIFY( static_cast<bool>(p2) );
|
||||
}
|
||||
|
||||
void
|
||||
@ -60,8 +60,8 @@ test03()
|
||||
std::shared_ptr<A> p1(new A);
|
||||
std::shared_ptr<A> p2(p1);
|
||||
p2.reset(new A);
|
||||
VERIFY( p1 );
|
||||
VERIFY( p2 );
|
||||
VERIFY( static_cast<bool>(p1) );
|
||||
VERIFY( static_cast<bool>(p2) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -52,7 +52,7 @@ test03()
|
||||
// { dg-error "used here" "" { target *-*-* } 42 }
|
||||
// { dg-error "no matching" "" { target *-*-* } 48 }
|
||||
// { dg-error "used here" "" { target *-*-* } 49 }
|
||||
// { dg-error "candidates are" "" { target *-*-* } 214 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 214 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 360 }
|
||||
// { dg-error "candidates are" "" { target *-*-* } 213 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 213 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 358 }
|
||||
// { dg-excess-errors "note" }
|
||||
|
@ -36,4 +36,4 @@ void test01()
|
||||
}
|
||||
|
||||
// { dg-error "used here" "" { target *-*-* } 35 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 350 }
|
||||
// { dg-error "deleted function" "" { target *-*-* } 348 }
|
||||
|
Loading…
x
Reference in New Issue
Block a user