Chris@16
|
1
|
Chris@16
|
2 #ifndef BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
|
Chris@16
|
3 #define BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
|
Chris@16
|
4
|
Chris@16
|
5 // Copyright Aleksey Gurtovoy 2001-2004
|
Chris@16
|
6 //
|
Chris@16
|
7 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
8 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
9 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
10 //
|
Chris@16
|
11 // See http://www.boost.org/libs/mpl for documentation.
|
Chris@16
|
12
|
Chris@101
|
13 // $Id$
|
Chris@101
|
14 // $Date$
|
Chris@101
|
15 // $Revision$
|
Chris@16
|
16
|
Chris@16
|
17 #include <boost/mpl/aux_/is_msvc_eti_arg.hpp>
|
Chris@16
|
18 #include <boost/mpl/aux_/config/eti.hpp>
|
Chris@16
|
19 #include <boost/mpl/aux_/config/gcc.hpp>
|
Chris@16
|
20 #include <boost/mpl/aux_/config/workaround.hpp>
|
Chris@16
|
21
|
Chris@16
|
22 namespace boost { namespace mpl { namespace aux {
|
Chris@16
|
23
|
Chris@16
|
24 #if defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
|
Chris@16
|
25
|
Chris@16
|
26 template< bool > struct msvc_eti_base_impl
|
Chris@16
|
27 {
|
Chris@16
|
28 template< typename T > struct result_
|
Chris@16
|
29 : T
|
Chris@16
|
30 {
|
Chris@16
|
31 typedef T type;
|
Chris@16
|
32 };
|
Chris@16
|
33 };
|
Chris@16
|
34
|
Chris@16
|
35 template<> struct msvc_eti_base_impl<true>
|
Chris@16
|
36 {
|
Chris@16
|
37 template< typename T > struct result_
|
Chris@16
|
38 {
|
Chris@16
|
39 typedef result_ type;
|
Chris@16
|
40 typedef result_ first;
|
Chris@16
|
41 typedef result_ second;
|
Chris@16
|
42 typedef result_ tag;
|
Chris@16
|
43 enum { value = 0 };
|
Chris@16
|
44 };
|
Chris@16
|
45 };
|
Chris@16
|
46
|
Chris@16
|
47 template< typename T > struct msvc_eti_base
|
Chris@16
|
48 : msvc_eti_base_impl< is_msvc_eti_arg<T>::value >
|
Chris@16
|
49 ::template result_<T>
|
Chris@16
|
50 {
|
Chris@16
|
51 };
|
Chris@16
|
52
|
Chris@16
|
53 #else // !BOOST_MPL_CFG_MSVC_70_ETI_BUG
|
Chris@16
|
54
|
Chris@16
|
55 template< typename T > struct msvc_eti_base
|
Chris@16
|
56 : T
|
Chris@16
|
57 {
|
Chris@16
|
58 #if BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, BOOST_TESTED_AT(0x0304))
|
Chris@16
|
59 msvc_eti_base();
|
Chris@16
|
60 #endif
|
Chris@16
|
61 typedef T type;
|
Chris@16
|
62 };
|
Chris@16
|
63
|
Chris@16
|
64 #endif
|
Chris@16
|
65
|
Chris@16
|
66 template<> struct msvc_eti_base<int>
|
Chris@16
|
67 {
|
Chris@16
|
68 typedef msvc_eti_base type;
|
Chris@16
|
69 typedef msvc_eti_base first;
|
Chris@16
|
70 typedef msvc_eti_base second;
|
Chris@16
|
71 typedef msvc_eti_base tag;
|
Chris@16
|
72 enum { value = 0 };
|
Chris@16
|
73 };
|
Chris@16
|
74
|
Chris@16
|
75 }}}
|
Chris@16
|
76
|
Chris@16
|
77 #endif // BOOST_MPL_AUX_MSVC_ETI_BASE_HPP_INCLUDED
|