#ifndef KGR_KANGARU_INCLUDE_KANGARU_DETAIL_UTILS_HPP #define KGR_KANGARU_INCLUDE_KANGARU_DETAIL_UTILS_HPP #include namespace kgr { namespace detail { struct no_autocall_t {}; template struct ServiceTypeHelper {}; template struct ServiceTypeHelper().forward()))> { using type = decltype(std::declval().forward()); }; } // namespace detail template struct Map; template<> struct Map<> {}; template struct Map { using Service = T; }; template using ServiceType = typename detail::ServiceTypeHelper::type; struct in_place_t{}; constexpr in_place_t in_place{}; constexpr detail::no_autocall_t no_autocall{}; namespace detail { template class Map, typename T> using service_map_t = typename Map::Service; template struct is_map : std::false_type {}; template struct is_map> : std::true_type {}; } // namespace detail } // namespace kgr #endif // KGR_KANGARU_INCLUDE_KANGARU_DETAIL_UTILS_HPP