libzed 1.9.9
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 {
8namespace core {
9namespace types {
11class no {
12 bool b[2];
13};
14template <typename T, typename Arg>
15no operator==(const T &, const Arg &);
16template <typename T, typename Arg>
17no operator<(const T &, const Arg &);
18template <typename T, typename Arg>
19no operator>(const T &, const Arg &);
20
21bool check(...);
22no &check(const no &);
23
25template <typename T, typename Arg = T>
27 enum { value = (sizeof(check(*(T *)(0) == *(Arg *)(0))) != sizeof(no)) };
28};
29
31template <typename T, typename Arg = T>
33 enum { value = (sizeof(check(*(T *)(0) < *(Arg *)(0))) != sizeof(no)) };
34};
35
37template <typename T, typename Arg = T>
39 enum { value = (sizeof(check(*(T *)(0) > *(Arg *)(0))) != sizeof(no)) };
40};
41} // namespace types
42} // namespace core
43} // namespace z
44
45#pragma GCC diagnostic pop
A wrapper for std::vector.
Definition array.hpp:72
Internal class to do template check if method exists.
Definition typeChecks.hpp:11
Template check if operator== exists.
Definition typeChecks.hpp:26
Template check if operator> exists.
Definition typeChecks.hpp:38
Template check if operator< exists.
Definition typeChecks.hpp:32