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