/* * Copyright (c) Atmosphère-NX * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #if defined(ATMOSPHERE_IS_STRATOSPHERE) namespace ams::util { namespace impl { template struct IsSharedPointerImpl : public std::false_type{}; template struct IsSharedPointerImpl> : public std::true_type{}; template struct IsUniquePointerImpl : public std::false_type{}; template struct IsUniquePointerImpl> : public std::true_type{}; template concept PointerToImpl = std::same_as::element_type, U>; } template concept IsRawPointer = std::is_pointer::value; template concept IsSharedPointer = impl::IsSharedPointerImpl::value; template concept IsUniquePointer = impl::IsUniquePointerImpl::value; template concept IsSmartPointer = IsSharedPointer || IsUniquePointer; template concept IsRawOrSmartPointer = IsRawPointer || IsSmartPointer; template concept SmartPointerTo = IsSmartPointer && impl::PointerToImpl; template concept RawOrSmartPointerTo = IsRawOrSmartPointer && impl::PointerToImpl; } #endif