P3423R2 — Extending User-Generated Diagnostic Messages
CWG
The first appearance of the compile-time message parameter in the C++ core language is in C++11, where `static_assert` declaration was introduced into the language by [N1720] with the syntax `static_assert(condition, message)`. At that time, the message parameter was the first time that users of the C++ language were able to control the generation of diagnostic messages in a dynamic way (excluding the preprocess macro `#error`, which is not controllable by the language itself, let alone dynamically in compile-time programming). Such flexibility has allowed the emergence of user-friendly compile-time libraries, where error messages can directly present to the user what they have done wrong. For instance, the following misuse of `std::print`: