libzed 1.10.2
A general-purpose library for quick and simple data manipulation.
 
Loading...
Searching...
No Matches
typeChecks.hpp
1#pragma once
2#pragma GCC diagnostic push
3#pragma GCC diagnostic ignored "-Wnonnull"
4
5#include <type_traits>
6
7namespace z ::core::types {
9struct no {};
10
11template <typename T, typename Arg>
12no operator<(const T &, const Arg &);
13template <typename T, typename Arg>
14no operator>(const T &, const Arg &);
15template <typename T, typename Arg>
16no operator==(const T &, const Arg &);
17
19template <typename T, typename Arg = T>
21 enum { value = !std::is_same<decltype(std::declval<T>() < std::declval<Arg>()), no>::value };
22};
23
25template <typename T, typename Arg = T>
27 enum { value = !std::is_same<decltype(std::declval<T>() > std::declval<Arg>()), no>::value };
28};
29
31template <typename T, typename Arg = T>
33 enum { value = !std::is_same<decltype(std::declval<T>() == std::declval<Arg>()), no>::value };
34};
35
36} // namespace z::core::types
37
38#pragma GCC diagnostic pop
A template to enable specializations for an object if operator== exists on it.
Definition typeChecks.hpp:32
A template to enable specializations for an object if operator> exists on it.
Definition typeChecks.hpp:26
A template to enable specializations for an object if operator< exists on it.
Definition typeChecks.hpp:20
Internal class to do template check if method exists.
Definition typeChecks.hpp:9