Namespaces
Variants
Actions

Diagnostic directives

From cppreference.com
 
 
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications(until C++17*)
noexcept specifier(C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr(C++11)
consteval(C++20)
constinit(C++20)
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
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
 
 

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

Contents

[edit]Syntax

#errordiagnostic-message (1)
#warningdiagnostic-message (2) (since C++23)

[edit]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 the validity of the program is not affected and the compilation continues.

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

[edit]Notes

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

[edit]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\n";}

Possible output:

The implementation used is hosted

[edit]References

  • C++23 standard (ISO/IEC 14882:2024):
  • 15.8 Error directive [cpp.error]
  • 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]

[edit]See also

C documentation for Diagnostic directives
close