1
2#ifndef BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
3#define BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
4
5// Copyright Aleksey Gurtovoy 2001-2004
6//
7// Distributed under the Boost Software License, Version 1.0.
8// (See accompanying file LICENSE_1_0.txt or copy at
9// http://www.boost.org/LICENSE_1_0.txt)
10//
11// See http://www.boost.org/libs/mpl for documentation.
12
13// $Id$
14// $Date$
15// $Revision$
16
17#include <boost/mpl/bool.hpp>
18#include <boost/mpl/aux_/config/msvc.hpp>
19#include <boost/mpl/aux_/config/workaround.hpp>
20#include <boost/mpl/aux_/lambda_support.hpp>
21
22#include <boost/type_traits/integral_constant.hpp>
23#include <boost/type_traits/is_empty.hpp>
24
25namespace boost { namespace mpl {
26
27// empty base class, guaranteed to have no members; inheritance from
28// 'empty_base' through the 'inherit' metafunction is a no-op - see
29// "mpl/inherit.hpp> header for the details
30struct empty_base {};
31
32template< typename T >
33struct is_empty_base
34 : false_
35{
36#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
37 using false_::value;
38#endif
39};
40
41template<>
42struct is_empty_base<empty_base>
43 : true_
44{
45#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
46 using true_::value;
47#endif
48};
49
50}}
51
52namespace boost {
53
54template<> struct is_empty< mpl::empty_base >
55 : public ::boost::integral_constant<bool,true>
56{
57public:
58 BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,is_empty,(mpl::empty_base))
59};
60
61}
62
63#endif // BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
64

source code of include/boost/mpl/empty_base.hpp