1 | |
2 | #ifndef BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED |
3 | #define BOOST_MPL_AUX_IS_MSVC_ETI_ARG_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$ |
14 | // $Date$ |
15 | // $Revision$ |
16 | |
17 | #include <boost/mpl/aux_/yes_no.hpp> |
18 | #include <boost/mpl/aux_/config/eti.hpp> |
19 | #include <boost/mpl/aux_/config/static_constant.hpp> |
20 | |
21 | namespace boost { namespace mpl { namespace aux { |
22 | |
23 | #if defined(BOOST_MPL_CFG_MSVC_ETI_BUG) |
24 | |
25 | #if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) |
26 | |
27 | template< typename T > |
28 | struct is_msvc_eti_arg |
29 | { |
30 | BOOST_STATIC_CONSTANT(bool, value = false); |
31 | }; |
32 | |
33 | #else // BOOST_MPL_CFG_MSVC_60_ETI_BUG |
34 | |
35 | struct eti_int_convertible |
36 | { |
37 | eti_int_convertible(int); |
38 | }; |
39 | |
40 | template< typename T > |
41 | struct is_msvc_eti_arg |
42 | { |
43 | static no_tag test(...); |
44 | static yes_tag test(eti_int_convertible); |
45 | static T& get(); |
46 | |
47 | BOOST_STATIC_CONSTANT(bool, value = |
48 | sizeof(test(get())) == sizeof(yes_tag) |
49 | ); |
50 | }; |
51 | |
52 | #endif |
53 | |
54 | template<> |
55 | struct is_msvc_eti_arg<int> |
56 | { |
57 | BOOST_STATIC_CONSTANT(bool, value = true); |
58 | }; |
59 | |
60 | #endif // BOOST_MPL_CFG_MSVC_ETI_BUG |
61 | |
62 | }}} |
63 | |
64 | #endif // BOOST_MPL_AUX_IS_MSVC_ETI_ARG_HPP_INCLUDED |
65 | |