| // { dg-do compile { target c++26 } } |
| // { dg-skip-if "" { *-*-* } { "-fno-char8_t" } } |
| |
| #include <format> |
| |
| void |
| test_invalid() |
| { |
| std::format_parse_context pc(""); |
| |
| // These types are all valid: |
| pc.check_dynamic_spec<bool, char, int, unsigned, long long, |
| unsigned long long, float, double, long double, |
| const char*, std::string_view, const void*>(0); |
| |
| // LWG 4142. check_dynamic_spec should require at least one type |
| pc.check_dynamic_spec<>(0); // { dg-error "here" } |
| |
| pc.check_dynamic_spec<void>(0); // { dg-error "here" } |
| // const void* is allowed, but void* is not |
| pc.check_dynamic_spec<void*>(0); // { dg-error "here" } |
| // int and long long are allowed, but long is not |
| pc.check_dynamic_spec<long>(0); // { dg-error "here" } |
| // char_type is allowed, but other character types are not |
| pc.check_dynamic_spec<wchar_t>(0); // { dg-error "here" } |
| pc.check_dynamic_spec<char8_t>(0); // { dg-error "here" } |
| // std::string_view is allowed, but std::string is not |
| pc.check_dynamic_spec<std::string>(0); // { dg-error "here" } |
| // The types in the pack must be unique. |
| pc.check_dynamic_spec<int, bool, int>(0); // { dg-error "here" } |
| |
| std::wformat_parse_context wpc(L""); |
| wpc.check_dynamic_spec<bool, wchar_t, int, unsigned, long long, |
| unsigned long long, float, double, long double, |
| const wchar_t*, std::wstring_view, const void*>(0); |
| wpc.check_dynamic_spec<char>(0); // { dg-error "here" } |
| wpc.check_dynamic_spec<char16_t>(0); // { dg-error "here" } |
| wpc.check_dynamic_spec<char32_t>(0); // { dg-error "here" } |
| } |
| |
| // Each failure above will trigger this static_assert: |
| // { dg-error "allowed types" "" { target *-*-* } 0 } |