13 #if !defined(_MSC_VER)
14 #define DEFAULT_MOVE_CONSTRUCTOR(ClassName) \
15 ClassName(ClassName &&) = default
17 #define DEFAULT_MOVE_CONSTRUCTOR(ClassName)
20 #if (__cplusplus < 201103L)
21 #if !defined(_MSC_VER)
24 #define constexpr const
28 #define noexcept throw()
34 #define DEPRECATED(msg) __declspec(deprecated(msg))
35 #elif defined(__GNUC__)
36 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 8)
37 #define DEPRECATED(msg) [[deprecated(msg)]]
39 #define DEPRECATED(msg) __attribute__((deprecated(msg)))
41 #elif __cplusplus > 201103L
42 #define DEPRECATED(msg) [[deprecated(msg)]]
44 #define DEPRECATED(msg)
49 #if __GNUC__ == 4 && __GNUC_MINOR__ < 9
50 #include <type_traits>
52 template <
class T>
using decay_t =
typename decay<T>::type;
62 void operator()(T *)
const noexcept {};
77 std::atomic<bool> moved{
false};
78 operator bool()
const {
return moved; }
82 #if __cplusplus == 201103L
85 #include <type_traits>
90 typedef unique_ptr<T> _Single_object;
94 struct _Unique_if<T[]> {
95 typedef unique_ptr<T[]> _Unknown_bound;
98 template <
class T,
size_t N>
99 struct _Unique_if<T[N]> {
100 typedef void _Known_bound;
103 template <
class T,
class... Args>
104 typename _Unique_if<T>::_Single_object make_unique(Args &&... args) {
105 return unique_ptr<T>(
new T(std::forward<Args>(args)...));
109 typename _Unique_if<T>::_Unknown_bound make_unique(
size_t n) {
110 typedef typename remove_extent<T>::type U;
111 return unique_ptr<T>(
new U[n]());
114 template <
class T,
class... Args>
115 typename _Unique_if<T>::_Known_bound make_unique(Args &&...) =
delete;