UGDK  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
compatibility.h
Go to the documentation of this file.
1 #ifndef UGDK_SYSTEM_COMPATIBILITY_H_
2 #define UGDK_SYSTEM_COMPATIBILITY_H_
3 
4 #include <memory>
5 #include <type_traits>
6 
7 namespace ugdk {
8 
9  template <typename T, typename... Args> inline
10  typename std::enable_if<!std::is_array<T>::value, std::unique_ptr<T>>::type
11  MakeUnique(Args&&... args) {
12  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
13  }
14 
15  template <typename T> inline
16  typename std::enable_if<std::is_array<T>::value && std::extent<T>::value == 0, std::unique_ptr<T>>::type
17  MakeUnique(std::size_t size) {
18  using Element = typename std::remove_extent<T>::type;
19  return std::unique_ptr<T>(new Element[size]);
20  }
21 
22  template <typename T, typename... Args> inline
23  typename std::enable_if<std::extent<T>::value != 0, void>::type
24  MakeUnique(std::size_t size) = delete;
25 }
26 
27 #endif // UGDK_SYSTEM_COMPATIBILITY_H_
Definition: animation.h:11
std::enable_if<!std::is_array< T >::value, std::unique_ptr< T > >::type MakeUnique(Args &&...args)
Definition: compatibility.h:11