Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / implicit_cast.hpp
1 // Copyright David Abrahams 2003.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 #ifndef IMPLICIT_CAST_DWA200356_HPP
6 # define IMPLICIT_CAST_DWA200356_HPP
7
8 # include <boost/mpl/identity.hpp>
9
10 namespace boost {
11
12 // implementation originally suggested by C. Green in
13 // http://lists.boost.org/MailArchives/boost/msg00886.php
14
15 // The use of identity creates a non-deduced form, so that the
16 // explicit template argument must be supplied
17 template <typename T>
18 inline T implicit_cast (typename mpl::identity<T>::type x) {
19     return x;
20 }
21
22 // incomplete return type now is here
23 //template <typename T>
24 //void implicit_cast (...);
25
26 // Macro for when you need a constant expression (Gennaro Prota)
27 #define BOOST_IMPLICIT_CAST(dst_type, expr)           \
28           ( sizeof( implicit_cast<dst_type>(expr) )   \
29                      ,                                \
30             static_cast<dst_type>(expr)               \
31           )
32
33 } // namespace boost
34
35 #endif // IMPLICIT_CAST_DWA200356_HPP