Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/language/noexcept"

From cppreference.com
< cpp‎ | language
(this way its more interesting)
(or better like that)
Line 46: Line 46:
 
class U{
 
class U{
 
public:
 
public:
 +
  ~U(){}
 
   std::vector<int> v;
 
   std::vector<int> v;
 
};
 
};
 
+
class V{
 +
public:
 +
  std::vector<int> v;
 +
};
 +
 
int main()
 
int main()
 
{
 
{
 
  T t;
 
  T t;
 
  U u;
 
  U u;
 +
V v;
 
   
 
   
 
  std::cout << std::boolalpha
 
  std::cout << std::boolalpha
Line 63: Line 69:
 
             << "Is T(T&) noexcept? " << noexcept(T(t)) << '\n'
 
             << "Is T(T&) noexcept? " << noexcept(T(t)) << '\n'
 
             << "Is U(U&&) noexcept? " << noexcept(U(std::declval<U>())) << '\n'
 
             << "Is U(U&&) noexcept? " << noexcept(U(std::declval<U>())) << '\n'
             << "Is U(U&) noexcept? " << noexcept(U(u)) << '\n';   
+
             << "Is U(U&) noexcept? " << noexcept(U(u)) << '\n' 
 +
            << "Is V(V&&) noexcept? " << noexcept(V(std::declval<V>())) << '\n'
 +
            << "Is V(V&) noexcept? " << noexcept(V(v)) << '\n';   
 
}
 
}
 
}}
 
}}

Revision as of 08:25, 20 April 2014

 
 
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++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
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
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 
Exceptions
try block
Throwing exceptions
Handling exceptions
Exception specification
    noexcept specification (C++11)
    dynamic specification (until C++17*)
noexcept operator (C++11)
 

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

Syntax

noexcept( expression )

Returns a prvalue of type bool.

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:

In all other cases the result is true.

Keywords

noexcept

Example

#include <iostream>
#include <utility>
#include <vector>
 
void may_throw();
void no_throw() noexcept;
auto lmay_throw = []{};
auto lno_throw = []() noexcept {};
class T{
public:
  ~T(){}
};
class U{
public:
  ~U(){}
  std::vector<int> v;
};
class V{
public:
  std::vector<int> v;
};
 
int main()
{
 T t;
 U u;
 V v;
 
 std::cout << std::boolalpha
            << "Is may_throw() noexcept? " << noexcept(may_throw()) << '\n'
            << "Is no_throw() noexcept? " << noexcept(no_throw()) << '\n'
            << "Is lmay_throw() noexcept? " << noexcept(lmay_throw()) << '\n'
            << "Is lno_throw() noexcept? " << noexcept(lno_throw()) << '\n'
            << "Is ~T() noexcept? " << noexcept(std::declval<T>().~T()) << '\n'
            << "Is T(T&&) noexcept? " << noexcept(T(std::declval<T>())) << '\n'
            << "Is T(T&) noexcept? " << noexcept(T(t)) << '\n'
            << "Is U(U&&) noexcept? " << noexcept(U(std::declval<U>())) << '\n'
            << "Is U(U&) noexcept? " << noexcept(U(u)) << '\n'  
            << "Is V(V&&) noexcept? " << noexcept(V(std::declval<V>())) << '\n'
            << "Is V(V&) noexcept? " << noexcept(V(v)) << '\n';  
}

See also

noexcept specifier(C++11) specifies whether a function could throw exceptions[edit]
Dynamic exception specification(until C++17) specifies what exceptions are thrown by a function (deprecated in C++11) [edit]