#pragma once #include // std::enable_if namespace ipc { // concept helpers template using require = typename std::enable_if::type; #ifdef IPC_CONCEPT_ # error "IPC_CONCEPT_ has been defined." #endif #define IPC_CONCEPT_(NAME, WHAT) \ template \ class NAME { \ private: \ template \ static std::true_type check(decltype(std::declval().WHAT)*); \ template \ static std::false_type check(...); \ public: \ using type = decltype(check(nullptr)); \ constexpr static auto value = type::value; \ } } // namespace ipc