HTTP v1.13.1
Loading...
Searching...
No Matches
CheckAtCompileTime.h
Go to the documentation of this file.
1#ifndef __COMPILE_TIME_CHECK__
2#define __COMPILE_TIME_CHECK__
3
4#include <type_traits>
5#include <string>
6
7#define CREATE_CHECK_CLASS(checkMethodName, ...) \
8 private: \
9 template<typename T> \
10 static constexpr decltype(std::declval<T>().checkMethodName(__VA_ARGS__), std::true_type()) checked(int); \
11 \
12 template<typename> \
13 static constexpr std::false_type checked(...); \
14 \
15 public: \
16 using type = decltype(checked<dataContainer>(0)); \
17 enum \
18 { \
19 value = type::value \
20 }; \
21
22namespace utility
23{
24 template<typename dataContainer>
26 {
28 };
29
30 template<typename dataContainer>
32 {
33 CREATE_CHECK_CLASS(resize, 0);
34 };
35
36 template<typename dataContainer>
38 {
40 };
41
42 template<typename dataContainer>
44 {
45 CREATE_CHECK_CLASS(begin);
46 };
47
48 template<typename dataContainer>
50 {
52 };
53
54 template<typename dataContainer>
56 {
57 protected:
58 template<typename T>
59 static constexpr decltype(T(std::begin(T()), std::end(T())), std::true_type()) checked(int);
60
61 template<typename>
62 static constexpr std::false_type checked(...);
63
64 public:
65 using type = decltype(checked<dataContainer>(0));
66 enum
67 {
68 value = type::value
69 };
70 };
71
72 template<typename T>
74 {
75 private:
76 template<typename U>
77 static constexpr decltype(std::declval<std::string>().append(std::declval<U>()), std::true_type()) check(int);
78
79 template<typename>
80 static constexpr std::false_type check(...);
81
82 public:
83 using type = decltype(check<T>(0));
84
85 enum
86 {
87 value = type::value
88 };
89 };
90}
91
92#endif
#define CREATE_CHECK_CLASS(checkMethodName,...)
decltype(check< T >(0)) type
static constexpr decltype(T(std::begin(T()), std::end(T())), std::true_type()) checked(int)
static constexpr std::false_type checked(...)
decltype(checked< dataContainer >(0)) type