| 524 | } |
| 525 | |
| 526 | struct test_format_string_handler { |
| 527 | constexpr void on_text(const char*, const char*) {} |
| 528 | |
| 529 | constexpr auto on_arg_id() -> int { return 0; } |
| 530 | |
| 531 | template <typename T> constexpr auto on_arg_id(T) -> int { return 0; } |
| 532 | |
| 533 | constexpr void on_replacement_field(int, const char*) {} |
| 534 | |
| 535 | constexpr auto on_format_specs(int, const char* begin, const char*) -> const |
| 536 | char* { |
| 537 | return begin; |
| 538 | } |
| 539 | |
| 540 | constexpr void on_error(const char*) { error = true; } |
| 541 | |
| 542 | bool error = false; |
| 543 | }; |
| 544 | |
| 545 | template <size_t N> constexpr bool parse_string(const char (&s)[N]) { |
| 546 | auto h = test_format_string_handler(); |