lxgui
Loading...
Searching...
No Matches
utils_meta.hpp
1#ifndef LXGUI_UTILS_META_HPP
2#define LXGUI_UTILS_META_HPP
3
4#include "lxgui/lxgui.hpp"
5
6#include <type_traits>
7
8namespace lxgui::utils {
9
10namespace impl {
11template<typename T>
13
14template<typename R, typename T, typename... Args>
15struct first_function_argument_<R (*)(T, Args...)> {
16 using type = T;
17};
18
19template<typename R, typename F, typename T, typename... Args>
20struct first_function_argument_<R (F::*)(T, Args...)> {
21 using type = T;
22};
23
24template<typename R, typename F, typename T, typename... Args>
25struct first_function_argument_<R (F::*)(T, Args...) const> {
26 using type = T;
27};
28} // namespace impl
29
30template<typename T>
32 typename impl::first_function_argument_<decltype(&std::decay_t<T>::operator())>::type;
33
34} // namespace lxgui::utils
35
36#endif
typename impl::first_function_argument_< decltype(&std::decay_t< T >::operator())>::type first_function_argument