| 2523 | |
| 2524 | template<typename value_type, typename string_type, typename integer_type> |
| 2525 | struct is_valid_json_string { |
| 2526 | static constexpr auto substr = is_substr_start_end_index_signature<string_type, integer_type>::value && |
| 2527 | is_substr_start_index_signature<string_type, integer_type>::value; |
| 2528 | static_assert(substr, "string_type must have a substr method taking only a start index and an overload " |
| 2529 | "taking a start and end index, both must return a string_type"); |
| 2530 | |
| 2531 | static constexpr auto operator_plus = is_std_operate_plus_signature<string_type>::value; |
| 2532 | static_assert(operator_plus, |
| 2533 | "string_type must have a '+' operator implemented which returns the concatenated string"); |
| 2534 | |
| 2535 | static constexpr auto value = |
| 2536 | std::is_constructible<value_type, string_type>::value && substr && operator_plus; |
| 2537 | }; |
| 2538 | |
| 2539 | template<typename value_type, typename number_type> |
| 2540 | struct is_valid_json_number { |
nothing calls this directly
no outgoing calls
no test coverage detected