@@ -112,11 +112,45 @@ class basic_string_view
112
112
113
113
using string_view = basic_string_view<char >;
114
114
using u16string_view = basic_string_view<char16_t >;
115
- using u32string_view = basic_string_view<char32_t >;
116
115
using wstring_view = basic_string_view<wchar_t >;
116
+
117
117
} // namespace v8pp {
118
118
#endif
119
119
120
+ namespace v8pp
121
+ {
122
+ // ///////////////////////////////////////////////////////////////////////////
123
+ //
124
+ // void_t
125
+ //
126
+ #ifdef __cpp_lib_void_t
127
+ using std::void_t ;
128
+ #else
129
+ template <typename ...> using void_t = void ;
130
+ #endif
131
+
132
+ // ///////////////////////////////////////////////////////////////////////////
133
+ //
134
+ // conjunction, disjunction, negation
135
+ //
136
+ #ifdef __cpp_lib_logical_traits
137
+ using std::conjunction;
138
+ using std::disjunction;
139
+ using std::negation;
140
+ #else
141
+ template <bool ...> struct bool_pack {};
142
+
143
+ template <typename ... Bs>
144
+ using conjunction = std::is_same<bool_pack<true , Bs::value...>, bool_pack<Bs::value..., true >>;
145
+
146
+ template <typename ... Bs>
147
+ using disjunction = std::integral_constant<bool , !conjunction<Bs...>::value>;
148
+
149
+ template <typename B>
150
+ using negation = std::integral_constant<bool , !B::value>;
151
+ #endif
152
+ } // namespace v8pp {
153
+
120
154
namespace v8pp { namespace detail {
121
155
122
156
template <typename T>
@@ -157,7 +191,7 @@ template<typename T, typename U = void>
157
191
struct is_mapping : std::false_type {};
158
192
159
193
template <typename T>
160
- struct is_mapping <T, std:: void_t <typename T::key_type, typename T::mapped_type,
194
+ struct is_mapping <T, void_t <typename T::key_type, typename T::mapped_type,
161
195
decltype (std::declval<T>().begin()), decltype(std::declval<T>().end())>> : std::true_type {};
162
196
163
197
// ///////////////////////////////////////////////////////////////////////////
@@ -168,9 +202,9 @@ template<typename T, typename U = void>
168
202
struct is_sequence : std::false_type {};
169
203
170
204
template <typename T>
171
- struct is_sequence <T, std:: void_t <typename T::value_type,
205
+ struct is_sequence <T, void_t <typename T::value_type,
172
206
decltype (std::declval<T>().begin()), decltype(std::declval<T>().end()),
173
- decltype(std::declval<T>().emplace_back(std::declval<typename T::value_type>()))>> : std:: negation<is_string<T>> {};
207
+ decltype(std::declval<T>().emplace_back(std::declval<typename T::value_type>()))>> : negation<is_string<T>> {};
174
208
175
209
// ///////////////////////////////////////////////////////////////////////////
176
210
//
@@ -183,7 +217,7 @@ struct has_reserve : std::false_type
183
217
};
184
218
185
219
template <typename T>
186
- struct has_reserve <T, std:: void_t <decltype(std::declval<T>().reserve(0 ))>> : std::true_type
220
+ struct has_reserve <T, void_t <decltype(std::declval<T>().reserve(0 ))>> : std::true_type
187
221
{
188
222
static void reserve (T& container, size_t capacity)
189
223
{
0 commit comments