73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//  This header intentionally has no include guards.
 | 
						|
//
 | 
						|
//  Copyright (c) 2010 Neil Groves
 | 
						|
//  Distributed under the Boost Software License, Version 1.0.
 | 
						|
//  See accompanying file LICENSE_1_0.txt or copy at
 | 
						|
//  http://www.boost.org/LICENSE_1_0.txt
 | 
						|
//
 | 
						|
// This code utilises the experience gained during the evolution of
 | 
						|
// <boost/smart_ptr/operator_bool.hpp>
 | 
						|
#ifndef BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP
 | 
						|
#define BOOST_RANGE_SAFE_BOOL_INCLUDED_HPP
 | 
						|
 | 
						|
#include <boost/config.hpp>
 | 
						|
#include <boost/range/config.hpp>
 | 
						|
 | 
						|
namespace boost
 | 
						|
{
 | 
						|
    namespace range_detail
 | 
						|
    {
 | 
						|
 | 
						|
template<class DataMemberPtr>
 | 
						|
class safe_bool
 | 
						|
{
 | 
						|
public:
 | 
						|
    typedef safe_bool this_type;
 | 
						|
 | 
						|
#if (defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570)) || defined(__CINT_)
 | 
						|
    typedef bool unspecified_bool_type;
 | 
						|
    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)
 | 
						|
    {
 | 
						|
        return x;
 | 
						|
    }
 | 
						|
#elif defined(_MANAGED)
 | 
						|
    static void unspecified_bool(this_type***)
 | 
						|
    {
 | 
						|
    }
 | 
						|
    typedef void(*unspecified_bool_type)(this_type***);
 | 
						|
    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)
 | 
						|
    {
 | 
						|
        return x ? unspecified_bool : 0;
 | 
						|
    }
 | 
						|
#elif \
 | 
						|
    ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \
 | 
						|
    ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \
 | 
						|
    ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )
 | 
						|
 | 
						|
    typedef bool (this_type::*unspecified_bool_type)() const;
 | 
						|
 | 
						|
    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr)
 | 
						|
    {
 | 
						|
        return x ? &this_type::detail_safe_bool_member_fn : 0;
 | 
						|
    }
 | 
						|
private:
 | 
						|
    bool detail_safe_bool_member_fn() const { return false; }
 | 
						|
#else
 | 
						|
    typedef DataMemberPtr unspecified_bool_type;
 | 
						|
    static unspecified_bool_type to_unspecified_bool(const bool x, DataMemberPtr p)
 | 
						|
    {
 | 
						|
        return x ? p : 0;
 | 
						|
    }
 | 
						|
#endif
 | 
						|
private:
 | 
						|
    safe_bool();
 | 
						|
    safe_bool(const safe_bool&);
 | 
						|
    void operator=(const safe_bool&);
 | 
						|
    ~safe_bool();
 | 
						|
};
 | 
						|
 | 
						|
    } // namespace range_detail
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
#endif // include guard
 |