// -*-c++-*-
// vim: set ft=cpp:

/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#ifndef cm_memory
#define cm_memory

#include "cmSTL.hxx" // IWYU pragma: keep

#include <memory> // IWYU pragma: export

#if !defined(CMake_HAVE_CXX_MAKE_UNIQUE)
#  include <cstddef>
#  include <type_traits>
#  include <utility>
#endif

namespace cm {

#if defined(CMake_HAVE_CXX_MAKE_UNIQUE)

using std::make_unique;

#else

namespace internals {

template <typename T>
struct make_unique_if
{
  using single = std::unique_ptr<T>;
};

template <typename T>
struct make_unique_if<T[]>
{
  using unbound_array = std::unique_ptr<T[]>;
};

template <typename T, std::size_t N>
struct make_unique_if<T[N]>
{
  using bound_array = void;
};
}

template <typename T, typename... Args>
typename internals::make_unique_if<T>::single make_unique(Args&&... args)
{
  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

template <typename T>
typename internals::make_unique_if<T>::unbound_array make_unique(std::size_t n)
{
  using E = typename std::remove_extent<T>::type;

  return std::unique_ptr<T>(new E[n]());
}

template <typename T, typename... Args>
typename internals::make_unique_if<T>::bound_array make_unique(Args&&...) =
  delete;

#endif

} // namespace cm

#endif
