]> git.donarmstrong.com Git - rsem.git/blob - boost/typeof/native.hpp
Updated boost to v1.55.0
[rsem.git] / boost / typeof / native.hpp
1 // Copyright (C) 2006 Arkadiy Vertleyb
2 // Use, modification and distribution is subject to the Boost Software
3 // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
4
5 #ifndef BOOST_TYPEOF_NATIVE_HPP_INCLUDED
6 #define BOOST_TYPEOF_NATIVE_HPP_INCLUDED
7
8 #ifndef MSVC_TYPEOF_HACK
9
10 #ifdef BOOST_NO_SFINAE
11
12 namespace boost { namespace type_of {
13
14     template<class T> 
15         T& ensure_obj(const T&);
16
17 }}
18
19 #else
20
21 #include <boost/type_traits/is_function.hpp> 
22 #include <boost/utility/enable_if.hpp>
23
24 namespace boost { namespace type_of {
25 # ifdef BOOST_NO_SFINAE
26     template<class T> 
27     T& ensure_obj(const T&);
28 # else
29     template<typename T>
30         typename enable_if<is_function<T>, T&>::type
31         ensure_obj(T&);
32
33     template<typename T>
34         typename disable_if<is_function<T>, T&>::type
35         ensure_obj(const T&);
36 # endif
37 }}
38
39 #endif//BOOST_NO_SFINAE
40
41 #define BOOST_TYPEOF(expr) BOOST_TYPEOF_KEYWORD(boost::type_of::ensure_obj(expr))
42 #define BOOST_TYPEOF_TPL BOOST_TYPEOF
43
44 #define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
45     struct name {\
46         typedef BOOST_TYPEOF_TPL(expr) type;\
47     };
48
49 #define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
50     struct name {\
51         typedef BOOST_TYPEOF(expr) type;\
52     };
53
54 #endif//MSVC_TYPEOF_HACK
55
56 #define BOOST_TYPEOF_REGISTER_TYPE(x)
57 #define BOOST_TYPEOF_REGISTER_TEMPLATE(x, params)
58
59 #endif//BOOST_TYPEOF_NATIVE_HPP_INCLUDED
60