make_unique_for_overwrite.h 667 B

123456789101112131415161718192021222324252627
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include <type_traits>
  6. namespace Common {
  7. template <class T>
  8. requires(!std::is_array_v<T>)
  9. std::unique_ptr<T> make_unique_for_overwrite() {
  10. return std::unique_ptr<T>(new T);
  11. }
  12. template <class T>
  13. requires std::is_unbounded_array_v<T>
  14. std::unique_ptr<T> make_unique_for_overwrite(std::size_t n) {
  15. return std::unique_ptr<T>(new std::remove_extent_t<T>[n]);
  16. }
  17. template <class T, class... Args>
  18. requires std::is_bounded_array_v<T>
  19. void make_unique_for_overwrite(Args&&...) = delete;
  20. } // namespace Common