54#ifndef LELY_UTIL_C_CALL_HPP_
55#define LELY_UTIL_C_CALL_HPP_
61template <
class,
class>
64template <
class,
class>
66template <class F, class C, typename c_mem_fn<F, C>::type>
74template <
class,
class>
77template <
class T,
class... S>
83template <
class T,
class... S>
87template <
class T,
class S>
98template <
class R,
class... ArgTypes,
class F>
101 function(ArgTypes... args,
void* data)
noexcept {
102 return (*
static_cast<F*
>(data))(args...);
110template <
class R,
class... ArgTypes,
class F>
118template <
class R,
class... ArgTypes,
class C>
120 using type = R (C::*)(ArgTypes...);
127template <
class R,
class... ArgTypes,
class C>
135template <
class R,
class... ArgTypes,
class C,
139 function(ArgTypes... args,
void* data)
noexcept {
140 return ((*
static_cast<C*
>(data)).*M)(args...);
148template <
class R,
class... ArgTypes,
class C,
149 typename c_mem_fn<R (*)(ArgTypes...), C>::type M>
This is the public header file of the utilities library.
Pops a type from the back of a parameter pack.