6 template<
typename... Args>
9 template<
typename R,
typename C>
10 constexpr auto operator()(R (C::*ptr)(Args...))
const noexcept ->
decltype(ptr)
15 template<
typename R,
typename C>
16 static constexpr auto of(R (C::*ptr)(Args...))
noexcept ->
decltype(ptr)
22 template<
typename... Args>
25 template<
typename R,
typename C>
26 constexpr auto operator()(R (C::*ptr)(Args...)
const)
const noexcept ->
decltype(ptr)
31 template<
typename R,
typename C>
32 static constexpr auto of(R (C::*ptr)(Args...)
const)
noexcept ->
decltype(ptr)
38 template<
typename... Args>
47 constexpr auto operator()(R (*ptr)(Args...))
const noexcept ->
decltype(ptr)
53 static constexpr auto of(R (*ptr)(Args...))
noexcept ->
decltype(ptr)
58 template<
typename R,
typename C,
typename... Args>
61 constexpr auto operator()(R (C::*ptr)(Args...))
const noexcept ->
decltype(ptr)
66 static constexpr auto of(R (C::*ptr)(Args...))
noexcept ->
decltype(ptr) {
return ptr; }
69 template<
typename R,
typename C,
typename... Args>
72 constexpr auto operator()(R (C::*ptr)(Args...)
const)
const noexcept ->
decltype(ptr)
77 static constexpr auto of(R (C::*ptr)(Args...)
const)
noexcept ->
decltype(ptr) {
return ptr; }
80 template<
typename R,
typename C,
typename... Args>
88 constexpr auto operator()(R (*ptr)(Args...))
const noexcept ->
decltype(ptr) {
return ptr; }
90 static constexpr auto of(R (*ptr)(Args...))
noexcept ->
decltype(ptr) {
return ptr; }
95 template<
typename... Args>
97 template<
typename... Args>
98 constexpr __attribute__((__unused__)) detail::overload<Args...> overload = {};
99 template<
typename... Args>
100 constexpr __attribute__((__unused__)) detail::const_overload<Args...> const_overload = {};
101 template<
typename... Args>
102 constexpr __attribute__((__unused__)) detail::non_const_overload<Args...> non_const_overload = {};