Home | History | Annotate | Download | only in aux_
      1 
      2 #ifndef BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
      3 #define BOOST_MPL_AUX_MSVC_ETI_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: msvc_eti_base.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/aux_/is_msvc_eti_arg.hpp>
     18 #include <boost/mpl/aux_/config/eti.hpp>
     19 #include <boost/mpl/aux_/config/gcc.hpp>
     20 #include <boost/mpl/aux_/config/workaround.hpp>
     21 
     22 namespace boost { namespace mpl { namespace aux {
     23 
     24 #if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
     25 
     26 template< bool > struct msvc_eti_base_impl
     27 {
     28     template< typename T > struct result_
     29         : T
     30     {
     31         typedef T type;
     32     };
     33 };
     34 
     35 template<> struct msvc_eti_base_impl<true>
     36 {
     37     template< typename T > struct result_
     38     {
     39         typedef result_ type;
     40         typedef result_ first;
     41         typedef result_ second;
     42         typedef result_ tag;
     43         enum { value = 0 };
     44     };
     45 };
     46 
     47 template< typename T > struct msvc_eti_base
     48     : msvc_eti_base_impl< is_msvc_eti_arg<T>::value >
     49         ::template result_<T>
     50 {
     51 };
     52 
     53 #else // !BOOST_MPL_CFG_MSVC_70_ETI_BUG
     54 
     55 template< typename T > struct msvc_eti_base
     56     : T
     57 {
     58 #if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
     59     msvc_eti_base();
     60 #endif
     61     typedef T type;
     62 };
     63 
     64 #endif
     65 
     66 template<> struct msvc_eti_base<int>
     67 {
     68     typedef msvc_eti_base type;
     69     typedef msvc_eti_base first;
     70     typedef msvc_eti_base second;
     71     typedef msvc_eti_base tag;
     72     enum { value = 0 };
     73 };
     74 
     75 }}}
     76 
     77 #endif // BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
     78