PageRenderTime 20ms CodeModel.GetById 13ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/spirit/home/classic/core/safe_bool.hpp

http://hadesmem.googlecode.com/
C++ Header | 64 lines | 45 code | 12 blank | 7 comment | 0 complexity | cac60410770fbf1fa7f4048f19502b0d MD5 | raw file
 1/*=============================================================================
 2    Copyright (c) 2003 Joel de Guzman
 3    http://spirit.sourceforge.net/
 4
 5  Distributed under the Boost Software License, Version 1.0. (See accompanying
 6  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 7=============================================================================*/
 8#if !defined(BOOST_SPIRIT_SAFE_BOOL_HPP)
 9#define BOOST_SPIRIT_SAFE_BOOL_HPP
10
11#include <boost/config.hpp>
12#include <boost/detail/workaround.hpp>
13#include <boost/spirit/home/classic/namespace.hpp>
14
15namespace boost { namespace spirit {
16
17BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
18
19    namespace impl
20    {
21        template <typename T>
22        struct no_base {};
23
24        template <typename T>
25        struct safe_bool_impl
26        {
27#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
28            void stub(T*) {};
29            typedef void (safe_bool_impl::*type)(T*);
30#else
31            typedef T* TP; // workaround to make parsing easier
32            TP stub;
33            typedef TP safe_bool_impl::*type;
34#endif
35        };
36    }
37
38    template <typename DerivedT, typename BaseT = impl::no_base<DerivedT> >
39    struct safe_bool : BaseT
40    {
41    private:
42        typedef impl::safe_bool_impl<DerivedT> impl_t;
43        typedef typename impl_t::type bool_type;
44
45    public:
46        operator bool_type() const
47        {
48            return static_cast<const DerivedT*>(this)->operator_bool() ?
49                &impl_t::stub : 0;
50        }
51
52        operator bool_type()
53        {
54            return static_cast<DerivedT*>(this)->operator_bool() ?
55                &impl_t::stub : 0;
56        }
57    };
58
59BOOST_SPIRIT_CLASSIC_NAMESPACE_END
60
61}}
62
63#endif
64