Diagnostic directives

From cppreference.com
 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++20)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
decltype (C++11)
auto (C++11)
alignas (C++11)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Implicit conversions - Explicit conversions
static_cast - dynamic_cast
const_cast - reinterpret_cast
Memory allocation
Classes
Class-specific function properties
explicit (C++11)
static
Special member functions
Templates
Miscellaneous
 
 

Shows the given error message and renders the program ill-formed, or given warning message without affect the validity of the program (since C++23).

Syntax

#error diagnostic-message (1)
#warning diagnostic-message (2) (since C++23)

Explanation

1) After encountering the #error directive, an implementation displays the message diagnostic-message and renders the program ill-formed (the compilation stops).
2) Same as (1), except that the validity of the program is not affected and the compilation continues.

diagnostic-message can consist of several words not necessarily in quotes.

Notes

Before its standardization in C++23, #warning has been provided by many compilers in all modes as a conforming extension.

Example

#if __STDC_HOSTED__ != 1
#  error "Not a hosted implementation"
#endif
 
#if __cplusplus >= 202302L
#  warning "Using #warning as a standard feature"
#endif
 
#include <iostream>
int main()
{
    std::cout << "The implementation used is hosted";
}

Possible output:

The implementation used is hosted

References

  • C++20 standard (ISO/IEC 14882:2020):
  • 15.8 Error directive [cpp.error]
  • C++17 standard (ISO/IEC 14882:2017):
  • 19.5 Error directive [cpp.error]
  • C++14 standard (ISO/IEC 14882:2014):
  • 16.5 Error directive [cpp.error]
  • C++11 standard (ISO/IEC 14882:2011):
  • 16.5 Error directive [cpp.error]
  • C++03 standard (ISO/IEC 14882:2003):
  • 16.5 Error directive [cpp.error]
  • C++98 standard (ISO/IEC 14882:1998):
  • 16.5 Error directive [cpp.error]

See also