MessagePack for C++
cpp_config.hpp
Go to the documentation of this file.
1 //
2 // MessagePack for C++ C++03/C++11 Adaptation
3 //
4 // Copyright (C) 2013-2016 KONDO Takatoshi
5 //
6 // Distributed under the Boost Software License, Version 1.0.
7 // (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
9 //
10 #ifndef MSGPACK_V1_CPP_CONFIG_HPP
11 #define MSGPACK_V1_CPP_CONFIG_HPP
12 
14 
15 #if defined(MSGPACK_USE_CPP03)
16 
17 namespace msgpack {
18 
22 
23 template <typename T>
24 struct unique_ptr : std::auto_ptr<T> {
25  explicit unique_ptr(T* p = 0) throw() : std::auto_ptr<T>(p) {}
26  unique_ptr(unique_ptr& a) throw() : std::auto_ptr<T>(a) {}
27  template<class Y>
28  unique_ptr (unique_ptr<Y>& a) throw() : std::auto_ptr<T>(a) {}
29 };
30 
31 template <typename T>
32 T& move(T& t)
33 {
34  return t;
35 }
36 
37 template <typename T>
38 T const& move(T const& t)
39 {
40  return t;
41 }
42 
43 template <bool P, typename T>
44 struct enable_if {
45  typedef T type;
46 };
47 
48 template <typename T>
49 struct enable_if<false, T> {
50 };
51 
52 template<typename T, T val>
53 struct integral_constant {
54  static T const value = val;
55  typedef T value_type;
56  typedef integral_constant<T, val> type;
57 };
58 
59 typedef integral_constant<bool, true> true_type;
60 typedef integral_constant<bool, false> false_type;
61 
62 template<class T, class U>
63 struct is_same : false_type {};
64 
65 template<class T>
66 struct is_same<T, T> : true_type {};
67 
68 template<typename T>
69 struct underlying_type {
70  typedef int type;
71 };
72 
73 template<class T>
74 struct is_array : false_type {};
75 
76 template<class T>
77 struct is_array<T[]> : true_type {};
78 
79 template<class T, std::size_t N>
80 struct is_array<T[N]> : true_type {};
81 
82 
83 template<class T>
84 struct remove_const {
85  typedef T type;
86 };
87 template<class T>
88 struct remove_const<const T> {
89  typedef T type;
90 };
91 
92 template<class T>
93 struct remove_volatile {
94  typedef T type;
95 };
96 template<class T>
97 struct remove_volatile<volatile T> {
98  typedef T type;
99 };
100 
101 template<class T>
102 struct remove_cv {
103  typedef typename msgpack::remove_volatile<
105  >::type type;
106 };
107 
108 namespace detail {
109 
110 template<class T>
111 struct is_pointer_helper : false_type {};
112 
113 template<class T>
114 struct is_pointer_helper<T*> : true_type {};
115 
116 } // namespace detail
117 
118 template<class T> struct is_pointer : detail::is_pointer_helper<typename remove_cv<T>::type> {};
119 
120 
122 } // MSGPACK_API_VERSION_NAMESPACE(v1)
124 
125 } // namespace msgpack
126 
127 #endif // MSGPACK_USE_CPP03
128 
129 #if __cplusplus >= 201402L
130 #define MSGPACK_DEPRECATED(msg) [[deprecated(msg)]]
131 #else // __cplusplus >= 201402L
132 #define MSGPACK_DEPRECATED(msg)
133 #endif // __cplusplus >= 201402L
134 
135 #endif // MSGPACK_V1_CPP_CONFIG_HPP
Definition: cpp_config_decl.hpp:74
integral_constant< bool, true > true_type
Definition: cpp_config_decl.hpp:59
Definition: adaptor_base.hpp:15
#define MSGPACK_API_VERSION_NAMESPACE(ns)
Definition: versioning.hpp:58
integral_constant< bool, false > false_type
Definition: cpp_config_decl.hpp:62
Definition: cpp_config_decl.hpp:76
T & move(T &t)