// https://github.com/kunitoki/LuaBridge3 // Copyright 2020, kunitoki // Copyright 2020, Dmitry Tarakanov // Copyright 2019, George Tokmaji // Copyright 2012, Vinnie Falco // SPDX-License-Identifier: MIT #pragma once #include "Config.h" #include "Errors.h" #include "Stack.h" #include "TypeTraits.h" #include "Userdata.h" #include #include namespace luabridge { //================================================================================================= /** * @brief Overloaded objects. */ template struct NonConstOverload { template constexpr auto operator()(R (T::*ptr)(Args...)) const noexcept -> decltype(ptr) { return ptr; } template static constexpr auto with(R (T::*ptr)(Args...)) noexcept -> decltype(ptr) { return ptr; } }; template struct ConstOverload { template constexpr auto operator()(R (T::*ptr)(Args...) const) const noexcept -> decltype(ptr) { return ptr; } template static constexpr auto with(R (T::*ptr)(Args...) const) noexcept -> decltype(ptr) { return ptr; } }; template struct Overload : ConstOverload, NonConstOverload { using ConstOverload::operator(); using NonConstOverload::operator(); template constexpr auto operator()(R (*ptr)(Args...)) const noexcept -> decltype(ptr) { return ptr; } template static constexpr auto with(R (T::*ptr)(Args...)) noexcept -> decltype(ptr) { return ptr; } }; //================================================================================================= /** * @brief Overload resolution. */ template [[maybe_unused]] constexpr Overload overload = {}; template [[maybe_unused]] constexpr ConstOverload constOverload = {}; template [[maybe_unused]] constexpr NonConstOverload nonConstOverload = {}; } // namespace luabridge