noexcept operator (since C++11)

From cppreference.com
 
 
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements
Jump statements
Functions
function declaration
lambda function declaration
function template
inline specifier
exception specifications (deprecated)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
decltype specifier (C++11)
Specifiers
cv specifiers
storage duration specifiers
constexpr specifier (C++11)
auto specifier (C++11)
alignas specifier (C++11)
Initialization
Literals
Expressions
alternative representations
Utilities
Types
typedef declaration
type alias declaration (C++11)
attributes (C++11)
Casts
implicit conversions
const_cast conversion
static_cast conversion
dynamic_cast conversion
reinterpret_cast conversion
C-style and functional cast
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
class template
function template
template specialization
parameter packs (C++11)
Miscellaneous
Inline assembly
 

The noexcept operator performs a compile-time check that returns true if an expression is declared to not throw any exceptions.

It can be used within a function template's noexcept specifier to declare that the function will throw exceptions for some types but not others.

Contents

[edit] Syntax

noexcept( expression )

Returns an object of type bool.

[edit] Explanation

The noexcept operator does not evaluate expression. The result is false if the expression contains at least one of the following potentially evaluated constructs:

  • call to any type of function that does not have non-throwing exception specification, unless it is a constant expression.
  • throw expression
  • dynamic_cast expression when the target type is a reference type, and conversion needs a run time check
  • typeid expression when argument type is polymorphic class type

In all other cases the result is true.

[edit] Keywords

noexcept

[edit] Example

template <class T>
void self_assign(T& t) noexcept(noexcept(t = t))
{ // self_assign is noexcept if and only if T::operator= is noexcept
    t = t;
}


[edit] See also

noexcept specifier requires a function to not throw any exceptions (C++11)
exception specification specifies what exceptions are thrown by a function (deprecated)