Home | History | Annotate | Download | only in mpl
      1 
      2 #ifndef BOOST_MPL_TAG_HPP_INCLUDED
      3 #define BOOST_MPL_TAG_HPP_INCLUDED
      4 
      5 // Copyright Aleksey Gurtovoy 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: tag.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/eval_if.hpp>
     18 #include <boost/mpl/void.hpp>
     19 #include <boost/mpl/aux_/has_tag.hpp>
     20 #include <boost/mpl/aux_/config/eti.hpp>
     21 
     22 namespace boost { namespace mpl {
     23 
     24 namespace aux {
     25 template< typename T > struct tag_impl
     26 {
     27     typedef typename T::tag type;
     28 };
     29 }
     30 
     31 template< typename T, typename Default = void_ > struct tag
     32 #if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
     33     : if_<
     34           aux::has_tag<T>
     35         , aux::tag_impl<T>
     36         , Default
     37         >::type
     38 {
     39 #else
     40 {
     41     typedef typename eval_if<
     42           aux::has_tag<T>
     43         , aux::tag_impl<T>
     44         , Default
     45         >::type type;
     46 
     47 #endif
     48 };
     49 
     50 }}
     51 
     52 #endif // BOOST_MPL_TAG_HPP_INCLUDED
     53