]> git.donarmstrong.com Git - rsem.git/blob - boost/smart_ptr/detail/operator_bool.hpp
Added error detection for cases such as a read's two mates having different names...
[rsem.git] / boost / smart_ptr / detail / operator_bool.hpp
1 //  This header intentionally has no include guards.
2 //
3 //  Copyright (c) 2001-2009, 2012 Peter Dimov
4 //
5 //  Distributed under the Boost Software License, Version 1.0.
6 //  See accompanying file LICENSE_1_0.txt or copy at
7 //  http://www.boost.org/LICENSE_1_0.txt
8
9 #if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS ) && !defined( BOOST_NO_CXX11_NULLPTR )
10
11     explicit operator bool () const BOOST_NOEXCEPT
12     {
13         return px != 0;
14     }
15
16 #elif ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__)
17
18     operator bool () const BOOST_NOEXCEPT
19     {
20         return px != 0;
21     }
22
23 #elif defined( _MANAGED )
24
25     static void unspecified_bool( this_type*** )
26     {
27     }
28
29     typedef void (*unspecified_bool_type)( this_type*** );
30
31     operator unspecified_bool_type() const BOOST_NOEXCEPT
32     {
33         return px == 0? 0: unspecified_bool;
34     }
35
36 #elif \
37     ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \
38     ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \
39     ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )
40
41     typedef element_type * (this_type::*unspecified_bool_type)() const;
42
43     operator unspecified_bool_type() const BOOST_NOEXCEPT
44     {
45         return px == 0? 0: &this_type::get;
46     }
47
48 #else
49
50     typedef element_type * this_type::*unspecified_bool_type;
51
52     operator unspecified_bool_type() const BOOST_NOEXCEPT
53     {
54         return px == 0? 0: &this_type::px;
55     }
56
57 #endif
58
59     // operator! is redundant, but some compilers need it
60     bool operator! () const BOOST_NOEXCEPT
61     {
62         return px == 0;
63     }