fixing stuff
[dyninst.git] / dynutil / h / dyn_detail / boost / detail / sp_convertible.hpp
1 #ifndef DYN_DETAIL_BOOST_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED
2 #define DYN_DETAIL_BOOST_DETAIL_SP_CONVERTIBLE_HPP_INCLUDED
3
4 // MS compatible compilers support #pragma once
5
6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7 # pragma once
8 #endif
9
10 //  detail/sp_convertible.hpp
11 //
12 //  Copyright 2008 Peter Dimov
13 //
14 //  Distributed under the Boost Software License, Version 1.0.
15 //  See accompanying file LICENSE_1_0.txt or copy at
16 //  http://www.boost.org/LICENSE_1_0.txt
17
18 #include <dyn_detail/boost/config.hpp>
19
20 #if !defined( DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE ) && defined( DYN_DETAIL_BOOST_NO_SFINAE )
21 # define DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE
22 #endif
23
24 #if !defined( DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __GNUC__ ) && ( __GNUC__ * 100 + __GNUC_MINOR__ < 303 )
25 # define DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE
26 #endif
27
28 #if !defined( DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ <= 0x610 )
29 # define DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE
30 #endif
31
32 #if !defined( DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE )
33
34 namespace dyn_detail
35 {
36   
37 namespace boost
38 {
39
40 namespace detail
41 {
42
43 template< class Y, class T > struct sp_convertible
44 {
45     typedef char (&yes) [1];
46     typedef char (&no)  [2];
47
48     static yes f( T* );
49     static no  f( ... );
50
51     enum _vt { value = sizeof( f( (Y*)0 ) ) == sizeof(yes) };
52 };
53
54 struct sp_empty
55 {
56 };
57
58 template< bool > struct sp_enable_if_convertible_impl;
59
60 template<> struct sp_enable_if_convertible_impl<true>
61 {
62     typedef sp_empty type;
63 };
64
65 template<> struct sp_enable_if_convertible_impl<false>
66 {
67 };
68
69 template< class Y, class T > struct sp_enable_if_convertible: public sp_enable_if_convertible_impl< sp_convertible< Y, T >::value >
70 {
71 };
72
73 } // namespace detail
74
75 } // namespace boost
76
77 } // namespace dyn_detail
78
79 #endif // !defined( DYN_DETAIL_BOOST_SP_NO_SP_CONVERTIBLE )
80
81 #endif  // #ifndef DYN_DETAIL_BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED