From 814411ced376b5ecaf1078f0a71366d26ff7ce36 Mon Sep 17 00:00:00 2001 From: cpplearner Date: Wed, 27 Jul 2022 17:21:46 +0800 Subject: [PATCH 1/2] Check `make_format_args`'s preconditions --- stl/inc/format | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stl/inc/format b/stl/inc/format index cf26ca191f..9b6406b953 100644 --- a/stl/inc/format +++ b/stl/inc/format @@ -3397,11 +3397,15 @@ using wformat_args = basic_format_args; template _NODISCARD auto make_format_args(_Args&&... _Vals) { + static_assert((_Has_formatter<_Args, _Context> && ...), + "Cannot format an argument. To make type T formattable, provide a formatter specialization."); return _Format_arg_store<_Context, _Args...>{_Vals...}; } template _NODISCARD auto make_wformat_args(_Args&&... _Vals) { + static_assert((_Has_formatter<_Args, wformat_context> && ...), + "Cannot format an argument. To make type T formattable, provide a formatter specialization."); return _Format_arg_store{_Vals...}; } From 1ab9067673c172e208537d628ca8baf720dbd1d7 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 22 Sep 2022 20:16:54 -0700 Subject: [PATCH 2/2] Add Standardese citations. Co-authored-by: Sam Huang --- stl/inc/format | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stl/inc/format b/stl/inc/format index 9b6406b953..b0d8b02667 100644 --- a/stl/inc/format +++ b/stl/inc/format @@ -3398,14 +3398,16 @@ using wformat_args = basic_format_args; template _NODISCARD auto make_format_args(_Args&&... _Vals) { static_assert((_Has_formatter<_Args, _Context> && ...), - "Cannot format an argument. To make type T formattable, provide a formatter specialization."); + "Cannot format an argument. To make type T formattable, provide a formatter specialization. " + "See N4917 [format.arg.store]/2 and [formatter.requirements]."); return _Format_arg_store<_Context, _Args...>{_Vals...}; } template _NODISCARD auto make_wformat_args(_Args&&... _Vals) { static_assert((_Has_formatter<_Args, wformat_context> && ...), - "Cannot format an argument. To make type T formattable, provide a formatter specialization."); + "Cannot format an argument. To make type T formattable, provide a formatter specialization. " + "See N4917 [format.arg.store]/2 and [formatter.requirements]."); return _Format_arg_store{_Vals...}; }