// { dg-do run { target c++26 } } #include #include void test_char() { std::string fmt = "{}"; auto s = std::format(std::runtime_format(fmt), 123); VERIFY( s == "123" ); } void test_wchar() { std::wstring fmt = L"{:#o}"; auto s = std::format(std::runtime_format(fmt), 456); VERIFY( s == L"0710" ); } void test_internal_api() { // Using _Runtime_format_string directly works even in C++20 mode. // This can be used internally by libstdc++. std::string fmt = "{:#x}"; auto s = std::format(std::__format::_Runtime_format_string(fmt), 789); VERIFY( s == "0x315" ); } static_assert( noexcept(std::format_string<>(std::runtime_format(""))) ); static_assert( noexcept(std::wformat_string<>(std::runtime_format(L""))) ); static_assert( noexcept(std::format_string(std::runtime_format(""))) ); static_assert( noexcept(std::wformat_string(std::runtime_format(L""))) ); // A format string can be constructed from the result of std::runtime_format // using copy elision, but cannot be constructed from an xvalue. static_assert( !std::is_constructible_v, decltype(std::runtime_format(""))&&> ); static_assert( !std::is_constructible_v, decltype(std::runtime_format(L""))&&> ); int main() { test_char(); test_wchar(); test_internal_api(); }