text: //
  // Created by Dawid Drozd aka Gelldur on 6/17/16.
  //
  
  #pragma once
  
  //#if __cplusplus >= 201402L // C++14
  //
  //#else // C++11
  //TODO switch to C++14?
  
  #include <cstddef>
  #include <memory>
  #include <type_traits>
  #include <utility>
  
  namespace std
  {
  template<class T>
  struct _Unique_if
  {
  	typedef unique_ptr<T> _Single_object;
  };
  
  template<class T>
  struct _Unique_if<T[]>
  {
  	typedef unique_ptr<T[]> _Unknown_bound;
  };
  
  template<class T, size_t N>
  struct _Unique_if<T[N]>
  {
  	typedef void _Known_bound;
  };
  
  template<class T, class... Args>
  typename _Unique_if<T>::_Single_object make_unique(Args&& ... args)
  {
  	return unique_ptr<T>(new T(std::forward<Args>(args)...));
  }
  
  template<class T>
  typename _Unique_if<T>::_Unknown_bound make_unique(size_t n)
  {
  	typedef typename remove_extent<T>::type U;
  	return unique_ptr<T>(new U[n]());
  }
  
  template<class T, class... Args>
  typename _Unique_if<T>::_Known_bound make_unique(Args&& ...) = delete;
  }
  
  //#endif // __cplusplus == 201402L
  
  
  