template <typename T, typename ResultType = void, typename = void>
struct check_traced_value_support
Helpers to check whether a given type T can be written into a TracedValue /
TracedProto
<MessageType
>.
Intended to be used for types like smart pointers, who should support
WriteIntoTrace only iff their inner type supports being written into
a TracedValue.
template
<typename
T>
class SmartPtr {
...
// Note: |Check| is needed to ensure that using
SmartPtr
<ClassWhichDoesNotSupportTracedValue
> does not generate a
compilation error.
template
<typename
Check=void>
typename check_traced_value_support
<T
, Check>::value
WriteIntoTrace(perfetto::TracedValue context) const {
WriteIntoTracedValue(std::move(context), *ptr_);
}
template
<typename
MessageType>
typename check_traced_value_support
<T
, MessageType>::value
WriteIntoTrace(perfetto::TracedProto
<MessageType
> message) const {
WriteIntoTracedProto(std::move(message), *ptr_);
}
};