Home | History | Annotate | Download | only in mpl
      1 
      2 #ifndef BOOST_MPL_VOID_HPP_INCLUDED
      3 #define BOOST_MPL_VOID_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: void.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
     14 // $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
     15 // $Revision: 49267 $
     16 
     17 #include <boost/mpl/void_fwd.hpp>
     18 #include <boost/mpl/bool.hpp>
     19 #include <boost/mpl/aux_/na_spec.hpp>
     20 #include <boost/mpl/aux_/config/msvc.hpp>
     21 #include <boost/mpl/aux_/config/workaround.hpp>
     22 
     23 BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
     24 
     25 //  [JDG Feb-4-2003] made void_ a complete type to allow it to be
     26 //  instantiated so that it can be passed in as an object that can be
     27 //  used to select an overloaded function. Possible use includes signaling
     28 //  a zero arity functor evaluation call.
     29 struct void_ { typedef void_ type; };
     30 
     31 BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
     32 
     33 namespace boost { namespace mpl {
     34 
     35 template< typename T >
     36 struct is_void_
     37     : false_
     38 {
     39 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
     40     using false_::value;
     41 #endif
     42 };
     43 
     44 template<>
     45 struct is_void_<void_>
     46     : true_
     47 {
     48 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
     49     using true_::value;
     50 #endif
     51 };
     52 
     53 template< typename T >
     54 struct is_not_void_
     55     : true_
     56 {
     57 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
     58     using true_::value;
     59 #endif
     60 };
     61 
     62 template<>
     63 struct is_not_void_<void_>
     64     : false_
     65 {
     66 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
     67     using false_::value;
     68 #endif
     69 };
     70 
     71 BOOST_MPL_AUX_NA_SPEC(1, is_void_)
     72 BOOST_MPL_AUX_NA_SPEC(1, is_not_void_)
     73 
     74 }}
     75 
     76 #endif // BOOST_MPL_VOID_HPP_INCLUDED
     77