// -*-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 <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
