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 22namespace boost { namespace mpl { 23 24namespace aux { 25template< typename T > struct tag_impl 26{ 27 typedef typename T::tag type; 28}; 29} 30 31template< 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