32#include "timemory/components/gotcha/backends.hpp"
66 template <
typename... Args>
69 (*this)(obj, std::forward<Args>(
args)...);
75 sfinae(obj, _called, 0, 0, 0);
78 template <
typename Up,
typename... Args,
84 sfinae(obj, _called, 0, 0, 0, _data, std::forward<Up>(_phase),
85 std::forward<Args>(
args)...);
88 sfinae(obj, _called, 0, 0, 0, _data, std::forward<Args>(
args)...);
91 sfinae(obj, _called, 0, 0, 0, std::forward<Up>(_phase),
92 std::forward<Args>(
args)...);
94 sfinae(obj, _called, 0, 0, 0, std::forward<Args>(
args)...);
99 template <
typename Arg,
typename... Args,
103 bool _called =
false;
104 sfinae(obj, _called, 0, 0, 0, std::forward<Arg>(arg),
105 std::forward<Args>(
args)...);
113 template <
typename Up,
typename... Args>
114 auto sfinae(Up& obj,
bool& _called,
int,
int,
int,
const gotcha_data_t& _data,
115 Args&&...
args)
const
116 ->
decltype(obj.audit(_data, std::forward<Args>(
args)...))
119 return obj.audit(_data, std::forward<Args>(
args)...);
122 template <
typename Up,
typename... Args>
123 auto sfinae(Up& obj,
bool& _called,
int,
int,
int, Args&&...
args)
const
124 ->
decltype(obj.audit(std::forward<Args>(
args)...))
127 return obj.audit(std::forward<Args>(
args)...);
134 template <
typename Up,
typename... Args>
135 auto sfinae(Up& obj,
bool& _called,
int,
int,
long,
const gotcha_data_t& _data,
136 Args&&...
args)
const
137 ->
decltype(obj.audit(_data.tool_id, std::forward<Args>(
args)...))
140 return obj.audit(_data.tool_id, std::forward<Args>(
args)...);
147 template <
typename Up,
typename Arg,
typename... Args>
148 auto sfinae(Up& obj,
bool& _called,
int,
long,
long, Arg&& arg, Args&&...) const
149 -> decltype(obj.
audit(
std::forward<Arg>(arg)))
152 return obj.audit(std::forward<Arg>(arg));
159 template <
typename Up,
typename... Args>
160 void sfinae(Up&,
bool&,
long,
long,
long, Args&&...)
const
void audit(TupleT< Tp... > &obj, Args &&... args)
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
The declaration for the types for operations without definitions.
Include the macros for operations.
Declare the operations types.
The purpose of this operation class is for a component to provide some extra customization within a G...
auto operator()(type &obj) const
TIMEMORY_DELETED_OBJECT(audit) template< typename... Args > audit(type &obj
component::gotcha_data gotcha_data_t
auto operator()(type &obj, const gotcha_data_t &_data, Up &&_phase, Args &&... args) const
auto operator()(type &obj, Arg &&arg, Args &&... args) const