58 explicit
record(T& obj, Args&&... args);
62 explicit
record(T&, Args&&...);
69 auto sfinae(T& obj,
int,
int, Args&&... args)
70 -> decltype((
std::declval<T&>().value = obj.
record(
std::forward<Args>(args)...)),
73 obj.
value = obj.record(std::forward<Args>(args)...);
77 template <
typename Up,
typename T,
typename... Args,
78 typename Vp =
typename Up::value_type,
80 auto sfinae(T& obj,
int,
long, Args&&...)
81 ->
decltype((std::declval<T&>().value = obj.record()),
void())
83 obj.value = obj.record();
87 template <
typename Up,
typename T,
typename... Args,
88 typename Vp =
typename Up::value_type,
90 auto sfinae(T&,
long,
long, Args&&...) ->
decltype(void(), void())
94 template <
typename Up,
typename T,
typename... Args>
95 void sfinae(T&,
long,
long, Args&&...)
101 template <
typename T>
102 auto sfinae(T& obj,
const T&
rhs,
int,
long) ->
decltype(obj +=
rhs)
108 template <
typename T>
109 void sfinae(T&,
const T&,
long,
long)
117template <
typename Tp>
120 sfinae(obj, rhs, 0, 0);
125template <
typename Tp>
129 sfinae<type>(obj, 0, 0, std::forward<Args>(args)...);
134template <
typename Tp>
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
The declaration for the types for operations without definitions.
#define SFINAE_WARNING(...)
Include the macros for operations.
Declare the operations types.
static constexpr bool value
record(T &obj, Args &&... args)
TIMEMORY_DELETED_OBJECT(record) record(type &obj
typename typename typename