60 template <
typename Arg,
typename... Args>
63 template <
typename... Args>
66 return sfinae(obj, 0, 0, std::forward<Args>(args)...);
71 template <
typename Up,
typename... Args>
72 auto sfinae(Up& obj,
int,
int, Args&&... args)
73 ->
decltype(obj.sample(std::forward<Args>(args)...))
75 return obj.sample(std::forward<Args>(args)...);
79 template <
typename Up,
typename... Args>
80 auto sfinae(Up& obj,
int,
long, Args&&...) ->
decltype(obj.sample())
86 template <
typename Up,
typename... Args>
87 null_type sfinae(Up&,
long,
long, Args&&...)
104template <
typename Tp>
105template <
typename Arg,
typename... Args>
108 sfinae(obj, 0, 0, std::forward<Arg>(arg), std::forward<Args>(args)...);
The declaration for the types for operations without definitions.
#define SFINAE_WARNING(...)
Include the macros for operations.
Declare the operations types.
this is a placeholder type for optional type-traits. It is used as the default type for the type-trai...
This operation class is used for sampling.
static constexpr bool enable
auto operator()(type &obj, Args &&... args)
sample(type &obj, Arg &&arg, Args &&... args)
TIMEMORY_DELETED_OBJECT(sample) explicit sample(type &obj)
trait that signifies the component supports sampling.