Files
cpp-thirdparty/noarch/include/kangaru/detail/utils.hpp
Bassem Girgis 81b4b9e273 Initial commit
2018-12-20 17:34:07 -06:00

55 lines
1.1 KiB
C++

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