//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // UNSUPPORTED: libcpp-has-no-incomplete-format // libc++ supports basic_format_string in C++20 as an extension // UNSUPPORTED: !stdlib=libc++ && c++20 // // template // class basic_format_string...> // // template consteval basic_format_string(const T& s); // // This constructor does the compile-time format string validation for the // std::format* functions. #include #include #include "test_macros.h" void run() { (void)std::basic_format_string{"foo"}; (void)std::basic_format_string{"{}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} (void)std::basic_format_string{"{0:{0}P}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} (void)std::basic_format_string{"{0:{0}}"}; (void)std::basic_format_string{"{0:{0}}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} (void)std::basic_format_string{"{.3}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} #ifndef TEST_HAS_NO_WIDE_CHARACTERS (void)std::basic_format_string{L"foo"}; (void)std::basic_format_string{L"{}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} (void)std::basic_format_string{L"{0:{0}P}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} (void)std::basic_format_string{L"{0:{0}}"}; (void)std::basic_format_string{L"{0:{0}}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} (void)std::basic_format_string{L"{.3}"}; // expected-error-re {{call to consteval function{{.*}}is not a constant expression}} #endif }