|
6 | 6 | #include <map>
|
7 | 7 | #include <unordered_map>
|
8 | 8 |
|
| 9 | +namespace { |
| 10 | + |
9 | 11 | template<typename Ret, typename F>
|
10 | 12 | void test_ret(F&&)
|
11 | 13 | {
|
@@ -61,11 +63,11 @@ void test_function_traits()
|
61 | 63 | char i(float) const volatile { return 0; }
|
62 | 64 | void operator()(int, char&) const volatile {}
|
63 | 65 |
|
64 |
| - float w; |
| 66 | + float w = 0; |
65 | 67 | const int x = 1;
|
66 |
| - volatile char y; |
| 68 | + volatile char y = 0; |
67 | 69 | const volatile bool z = true;
|
68 |
| - mutable volatile short zz; |
| 70 | + mutable volatile short zz = 0; |
69 | 71 | };
|
70 | 72 |
|
71 | 73 | test_ret<float>(&X::f);
|
@@ -171,83 +173,107 @@ void test_is_callable()
|
171 | 173 | static_assert(!is_callable<Y>::value, "Y is not callable");
|
172 | 174 | }
|
173 | 175 |
|
174 |
| -void test_type_traits() |
| 176 | +void test_concepts() |
175 | 177 | {
|
176 |
| - static_assert(v8pp::detail::is_string<std::string>::value, "std::string"); |
177 |
| - static_assert(!v8pp::detail::is_sequence<std::string>::value, "std::string"); |
178 |
| - static_assert(!v8pp::detail::is_mapping<std::string>::value, "std::string"); |
179 |
| - static_assert(!v8pp::detail::is_array<std::string>::value, "std::string"); |
180 |
| - |
181 |
| - static_assert(v8pp::detail::is_string<std::string_view>::value, "std::string_view"); |
182 |
| - static_assert(v8pp::detail::is_string<std::u16string>::value, "std::u16string"); |
183 |
| - static_assert(v8pp::detail::is_string<std::u16string_view>::value, "std::u16string_view"); |
184 |
| - static_assert(v8pp::detail::is_string<std::u32string>::value, "std::u32string"); |
185 |
| - static_assert(v8pp::detail::is_string<std::u32string_view>::value, "std::u32string_view"); |
186 |
| - static_assert(v8pp::detail::is_string<std::wstring>::value, "std::wstring"); |
187 |
| - static_assert(v8pp::detail::is_string<std::wstring_view>::value, "std::wstring_view"); |
188 |
| - static_assert(v8pp::detail::is_string<char const*>::value, "char const*"); |
189 |
| - static_assert(v8pp::detail::is_string<char16_t const*>::value, "char16_t const*"); |
190 |
| - static_assert(v8pp::detail::is_string<char32_t const*>::value, "char32_t const*"); |
191 |
| - static_assert(v8pp::detail::is_string<wchar_t const*>::value, "wchar_t const*"); |
192 |
| - |
193 |
| - static_assert(!v8pp::detail::is_string<std::array<int, 1>>::value, "std::array"); |
194 |
| - static_assert(!v8pp::detail::is_mapping<std::array<int, 1>>::value, "std::array"); |
195 |
| - static_assert(!v8pp::detail::is_sequence<std::array<int, 1>>::value, "std::array"); |
196 |
| - static_assert(!v8pp::detail::is_sequence<std::array<int, 1>>::value, "std::array"); |
197 |
| - static_assert(v8pp::detail::is_array<std::array<int, 1>>::value, "std::array"); |
198 |
| - static_assert(!v8pp::detail::has_reserve<std::array<int, 1>>::value, "std::array"); |
199 |
| - |
200 |
| - static_assert(!v8pp::detail::is_string<std::vector<char>>::value, "std::vector"); |
201 |
| - static_assert(!v8pp::detail::is_mapping<std::vector<char>>::value, "std::vector"); |
202 |
| - static_assert(v8pp::detail::is_sequence<std::vector<char>>::value, "std::vector"); |
203 |
| - static_assert(!v8pp::detail::is_array<std::vector<char>>::value, "std::vector"); |
204 |
| - static_assert(v8pp::detail::has_reserve<std::vector<char>>::value, "std::vector"); |
205 |
| - |
206 |
| - static_assert(!v8pp::detail::is_string<std::deque<int>>::value, "std::deque"); |
207 |
| - static_assert(!v8pp::detail::is_mapping<std::deque<int>>::value, "std::deque"); |
208 |
| - static_assert(v8pp::detail::is_sequence<std::deque<int>>::value, "std::deque"); |
209 |
| - static_assert(!v8pp::detail::is_array<std::deque<int>>::value, "std::deque"); |
210 |
| - static_assert(!v8pp::detail::has_reserve<std::deque<int>>::value, "std::deque"); |
211 |
| - |
212 |
| - static_assert(!v8pp::detail::is_string<std::list<bool>>::value, "std::list"); |
213 |
| - static_assert(!v8pp::detail::is_mapping<std::list<bool>>::value, "std::list"); |
214 |
| - static_assert(v8pp::detail::is_sequence<std::list<bool>>::value, "std::list"); |
215 |
| - static_assert(!v8pp::detail::is_array<std::list<bool>>::value, "std::list"); |
216 |
| - static_assert(!v8pp::detail::has_reserve<std::list<bool>>::value, "std::list"); |
217 |
| - |
218 |
| - static_assert(!v8pp::detail::is_string<std::tuple<int, char>>::value, "std::tuple"); |
219 |
| - static_assert(!v8pp::detail::is_mapping<std::tuple<int, char>>::value, "std::tuple"); |
220 |
| - static_assert(!v8pp::detail::is_sequence<std::tuple<int, char>>::value, "std::tuple"); |
221 |
| - static_assert(!v8pp::detail::is_array<std::tuple<int, char>>::value, "std::tuple"); |
222 |
| - static_assert(v8pp::detail::is_tuple<std::tuple<int, char>>::value, "std::tuple"); |
223 |
| - |
224 |
| - static_assert(!v8pp::detail::is_string<std::map<int, float>>::value, "std::map"); |
225 |
| - static_assert(v8pp::detail::is_mapping<std::map<int, float>>::value, "std::map"); |
226 |
| - static_assert(!v8pp::detail::is_sequence<std::map<int, char>>::value, "std::map"); |
227 |
| - static_assert(!v8pp::detail::is_array<std::map<int, char>>::value, "std::map"); |
228 |
| - |
229 |
| - static_assert(!v8pp::detail::is_string<std::multimap<int, char>>::value, "std::multimap"); |
230 |
| - static_assert(v8pp::detail::is_mapping<std::multimap<bool, std::string, std::greater<>>>::value, "std::multimap"); |
231 |
| - static_assert(!v8pp::detail::is_sequence<std::multimap<int, char>>::value, "std::multimap"); |
232 |
| - static_assert(!v8pp::detail::is_array<std::multimap<int, char>>::value, "std::multimap"); |
233 |
| - |
234 |
| - static_assert(!v8pp::detail::is_string<std::unordered_map<int, char>>::value, "std::unordered_map"); |
235 |
| - static_assert(v8pp::detail::is_mapping<std::unordered_map<std::string, std::string>>::value, "std::unordered_map"); |
236 |
| - static_assert(!v8pp::detail::is_sequence<std::unordered_map<int, char>>::value, "std::unordered_map"); |
237 |
| - static_assert(!v8pp::detail::is_array<std::unordered_map<int, char>>::value, "std::unordered_map"); |
238 |
| - |
239 |
| - static_assert(!v8pp::detail::is_array<std::unordered_multimap<int, char>>::value, "std::unordered_multimap"); |
240 |
| - static_assert(v8pp::detail::is_mapping<std::unordered_multimap<char, std::string>>::value, "std::unordered_multimap"); |
241 |
| - static_assert(!v8pp::detail::is_sequence<std::unordered_multimap<int, char>>::value, "std::unordered_multimap"); |
242 |
| - static_assert(!v8pp::detail::is_array<std::unordered_multimap<int, char>>::value, "std::unordered_multimap"); |
| 178 | + static_assert(v8pp::detail::String<std::string>, "std::string"); |
| 179 | + static_assert(!v8pp::detail::Sequence<std::string>, "std::string"); |
| 180 | + static_assert(!v8pp::detail::Mapping<std::string>, "std::string"); |
| 181 | + static_assert(!v8pp::detail::Array<std::string>, "std::string"); |
| 182 | + static_assert(v8pp::detail::HasReserve<std::string>, "std::string"); |
| 183 | + static_assert(!v8pp::detail::Tuple<std::string>, "std::string"); |
| 184 | + |
| 185 | + static_assert(v8pp::detail::String<std::string_view>, "std::string_view"); |
| 186 | + static_assert(v8pp::detail::String<std::u16string>, "std::u16string"); |
| 187 | + static_assert(v8pp::detail::String<std::u16string_view>, "std::u16string_view"); |
| 188 | + static_assert(v8pp::detail::String<std::u32string>, "std::u32string"); |
| 189 | + static_assert(v8pp::detail::String<std::u32string_view>, "std::u32string_view"); |
| 190 | + static_assert(v8pp::detail::String<std::wstring>, "std::wstring"); |
| 191 | + static_assert(v8pp::detail::String<std::wstring_view>, "std::wstring_view"); |
| 192 | + static_assert(v8pp::detail::String<char const*>, "char const*"); |
| 193 | + static_assert(v8pp::detail::String<char16_t const*>, "char16_t const*"); |
| 194 | + static_assert(v8pp::detail::String<char32_t const*>, "char32_t const*"); |
| 195 | + static_assert(v8pp::detail::String<wchar_t const*>, "wchar_t const*"); |
| 196 | + |
| 197 | + static_assert(!v8pp::detail::String<std::array<int, 1>>, "std::array"); |
| 198 | + static_assert(!v8pp::detail::Mapping<std::array<int, 1>>, "std::array"); |
| 199 | + static_assert(!v8pp::detail::Sequence<std::array<int, 1>>, "std::array"); |
| 200 | + static_assert(!v8pp::detail::Sequence<std::array<int, 1>>, "std::array"); |
| 201 | + static_assert(v8pp::detail::Array<std::array<int, 1>>, "std::array"); |
| 202 | + static_assert(!v8pp::detail::HasReserve<std::array<int, 1>>, "std::array"); |
| 203 | + static_assert(!v8pp::detail::Tuple<std::array<int, 1>>, "std::array"); |
| 204 | + |
| 205 | + static_assert(!v8pp::detail::String<std::vector<char>>, "std::vector"); |
| 206 | + static_assert(!v8pp::detail::Mapping<std::vector<char>>, "std::vector"); |
| 207 | + static_assert(v8pp::detail::Sequence<std::vector<char>>, "std::vector"); |
| 208 | + static_assert(!v8pp::detail::Array<std::vector<char>>, "std::vector"); |
| 209 | + static_assert(v8pp::detail::HasReserve<std::vector<char>>, "std::vector"); |
| 210 | + static_assert(!v8pp::detail::Tuple<std::vector<char>>, "std::vector"); |
| 211 | + |
| 212 | + static_assert(!v8pp::detail::String<std::deque<int>>, "std::deque"); |
| 213 | + static_assert(!v8pp::detail::Mapping<std::deque<int>>, "std::deque"); |
| 214 | + static_assert(v8pp::detail::Sequence<std::deque<int>>, "std::deque"); |
| 215 | + static_assert(!v8pp::detail::Array<std::deque<int>>, "std::deque"); |
| 216 | + static_assert(!v8pp::detail::HasReserve<std::deque<int>>, "std::deque"); |
| 217 | + static_assert(!v8pp::detail::Tuple<std::deque<int>>, "std::deque"); |
| 218 | + |
| 219 | + static_assert(!v8pp::detail::String<std::list<bool>>, "std::list"); |
| 220 | + static_assert(!v8pp::detail::Mapping<std::list<bool>>, "std::list"); |
| 221 | + static_assert(v8pp::detail::Sequence<std::list<bool>>, "std::list"); |
| 222 | + static_assert(!v8pp::detail::Array<std::list<bool>>, "std::list"); |
| 223 | + static_assert(!v8pp::detail::HasReserve<std::list<bool>>, "std::list"); |
| 224 | + static_assert(!v8pp::detail::Tuple<std::list<bool>>, "std::list"); |
| 225 | + |
| 226 | + static_assert(!v8pp::detail::String<std::map<int, float>>, "std::map"); |
| 227 | + static_assert(v8pp::detail::Mapping<std::map<int, float>>, "std::map"); |
| 228 | + static_assert(!v8pp::detail::Sequence<std::map<int, char>>, "std::map"); |
| 229 | + static_assert(!v8pp::detail::Array<std::map<int, char>>, "std::map"); |
| 230 | + static_assert(!v8pp::detail::HasReserve<std::map<int, char>>, "std::map"); |
| 231 | + static_assert(!v8pp::detail::Tuple<std::map<int, char>>, "std::map"); |
| 232 | + |
| 233 | + static_assert(!v8pp::detail::String<std::multimap<int, char>>, "std::multimap"); |
| 234 | + static_assert(v8pp::detail::Mapping<std::multimap<bool, std::string, std::greater<>>>, "std::multimap"); |
| 235 | + static_assert(!v8pp::detail::Sequence<std::multimap<int, char>>, "std::multimap"); |
| 236 | + static_assert(!v8pp::detail::Array<std::multimap<int, char>>, "std::multimap"); |
| 237 | + static_assert(!v8pp::detail::HasReserve<std::multimap<int, char>>, "std::multimap"); |
| 238 | + static_assert(!v8pp::detail::Tuple<std::multimap<int, char>>, "std::multimap"); |
| 239 | + |
| 240 | + static_assert(!v8pp::detail::String<std::unordered_map<int, char>>, "std::unordered_map"); |
| 241 | + static_assert(v8pp::detail::Mapping<std::unordered_map<std::string, std::string>>, "std::unordered_map"); |
| 242 | + static_assert(!v8pp::detail::Sequence<std::unordered_map<int, char>>, "std::unordered_map"); |
| 243 | + static_assert(!v8pp::detail::Array<std::unordered_map<int, char>>, "std::unordered_map"); |
| 244 | + static_assert(v8pp::detail::HasReserve<std::unordered_map<int, char>>, "std::unordered_map"); |
| 245 | + static_assert(!v8pp::detail::Tuple<std::unordered_map<int, char>>, "std::unordered_map"); |
| 246 | + |
| 247 | + static_assert(!v8pp::detail::String<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 248 | + static_assert(v8pp::detail::Mapping<std::unordered_multimap<char, std::string>>, "std::unordered_multimap"); |
| 249 | + static_assert(!v8pp::detail::Sequence<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 250 | + static_assert(!v8pp::detail::Array<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 251 | + static_assert(v8pp::detail::HasReserve<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 252 | + static_assert(!v8pp::detail::Tuple<std::unordered_multimap<int, char>>, "std::unordered_multimap"); |
| 253 | + |
| 254 | + static_assert(v8pp::detail::Tuple<std::tuple<int, char, float>>, "std::tuple"); |
| 255 | + static_assert(v8pp::detail::Tuple<std::tuple<std::tuple<bool>>>, "std::tuple"); |
| 256 | + static_assert(v8pp::detail::Tuple<std::pair<int, int>>, "std::tuple"); |
| 257 | + static_assert(!v8pp::detail::Tuple<std::array<int, 10>>, "std::tuple"); |
| 258 | + static_assert(!v8pp::detail::Tuple<int>, "std::tuple"); |
| 259 | + static_assert(!v8pp::detail::Tuple<int>, "std::tuple"); |
| 260 | + static_assert(!v8pp::detail::String<std::tuple<int, char>>, "std::tuple"); |
| 261 | + static_assert(!v8pp::detail::Mapping<std::tuple<int, char>>, "std::tuple"); |
| 262 | + static_assert(!v8pp::detail::Sequence<std::tuple<int, char>>, "std::tuple"); |
| 263 | + static_assert(!v8pp::detail::Array<std::tuple<int, char>>, "std::tuple"); |
| 264 | + static_assert(!v8pp::detail::HasReserve<std::tuple<int, char>>, "std::tuple"); |
243 | 265 |
|
244 | 266 | static_assert(!v8pp::detail::is_shared_ptr<int>::value, "int");
|
245 | 267 | static_assert(v8pp::detail::is_shared_ptr<std::shared_ptr<int>>::value, "int");
|
| 268 | + static_assert(v8pp::detail::is_shared_ptr<std::shared_ptr<std::vector<char>>>::value, "std::vector<char"); |
| 269 | + static_assert(!v8pp::detail::is_shared_ptr<std::string>::value, "std::string"); |
246 | 270 | }
|
247 | 271 |
|
| 272 | +} // unnamed namespace |
| 273 | + |
248 | 274 | void test_utility()
|
249 | 275 | {
|
250 |
| - test_type_traits(); |
| 276 | + test_concepts(); |
251 | 277 | test_function_traits();
|
252 | 278 | test_tuple_tail();
|
253 | 279 | test_is_callable();
|
|
0 commit comments