Added lots of small utilities
This commit is contained in:
42
include/cppoverloadutils.h
Normal file
42
include/cppoverloadutils.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
namespace cpputils {
|
||||
template <typename... Args>
|
||||
struct CppNonConstOverload
|
||||
{
|
||||
template <typename R, typename T>
|
||||
constexpr auto operator()(R (T::*ptr)(Args...)) const noexcept -> decltype(ptr)
|
||||
{ return ptr; }
|
||||
template <typename R, typename T>
|
||||
static constexpr auto of(R (T::*ptr)(Args...)) noexcept -> decltype(ptr)
|
||||
{ return ptr; }
|
||||
};
|
||||
template <typename... Args>
|
||||
struct CppConstOverload
|
||||
{
|
||||
template <typename R, typename T>
|
||||
constexpr auto operator()(R (T::*ptr)(Args...) const) const noexcept -> decltype(ptr)
|
||||
{ return ptr; }
|
||||
template <typename R, typename T>
|
||||
static constexpr auto of(R (T::*ptr)(Args...) const) noexcept -> decltype(ptr)
|
||||
{ return ptr; }
|
||||
};
|
||||
template <typename... Args>
|
||||
struct CppOverload : CppConstOverload<Args...>, CppNonConstOverload<Args...>
|
||||
{
|
||||
using CppConstOverload<Args...>::of;
|
||||
using CppConstOverload<Args...>::operator();
|
||||
using CppNonConstOverload<Args...>::of;
|
||||
using CppNonConstOverload<Args...>::operator();
|
||||
template <typename R>
|
||||
constexpr auto operator()(R (*ptr)(Args...)) const noexcept -> decltype(ptr)
|
||||
{ return ptr; }
|
||||
template <typename R>
|
||||
static constexpr auto of(R (*ptr)(Args...)) noexcept -> decltype(ptr)
|
||||
{ return ptr; }
|
||||
};
|
||||
|
||||
template <typename... Args> constexpr __attribute__((__unused__)) CppOverload<Args...> cppOverload = {};
|
||||
template <typename... Args> constexpr __attribute__((__unused__)) CppConstOverload<Args...> cppConstOverload = {};
|
||||
template <typename... Args> constexpr __attribute__((__unused__)) CppNonConstOverload<Args...> cppNonConstOverload = {};
|
||||
} // namespace cpputils
|
||||
Reference in New Issue
Block a user