3#include <userver/utils/void_t.hpp>
7namespace utils::statistics::detail {
10template <
typename Result,
typename Counter,
typename Duration,
typename = void_t<>>
11struct ResultWantsAddFunction : std::false_type {};
13template <
typename Result,
typename Counter,
typename Duration>
14struct ResultWantsAddFunction<
19 decltype(std::declval<Result>().Add(std::declval<Counter>(), std::declval<Duration>(), std::declval<Duration>())
20 )>> : std::true_type {};
22template <
typename Result,
typename Counter,
typename Duration>
23inline constexpr bool kResultWantsAddFunction = ResultWantsAddFunction<Result, Counter, Duration>::value;
26template <
typename Result,
typename Counter,
typename = void_t<>>
27struct ResultCanUseAddAssign : std::false_type {};
29template <
typename Result,
typename Counter>
31 ResultCanUseAddAssign<Result, Counter, void_t<
decltype(std::declval<Result&>() += std::declval<
const Counter&>())>>
34template <
typename Result,
typename Counter>
35inline constexpr bool kResultCanUseAddAssign = ResultCanUseAddAssign<Result, Counter>::value;
38template <
typename Counter,
typename = void_t<>>
39struct CanReset : std::false_type {};
41template <
typename Counter>
42struct CanReset<Counter, void_t<
decltype(std::declval<Counter&>().Reset())>> : std::true_type {};
44template <
typename Counter>
45inline constexpr bool kCanReset = CanReset<Counter>::value;