table of contents
        
      
      
    | std::experimental::scope_success::scope_success(3) | C++ Standard Libary | std::experimental::scope_success::scope_success(3) | 
NAME¶
std::experimental::scope_success::scope_success - std::experimental::scope_success::scope_success
Synopsis¶
 template <class Fn>
  
   explicit scope_success( Fn&& fn ) noexcept(/*see (1) (library
    fundamentals TS v3)
  
   below*/);
  
   scope_success( scope_success&& other ) (2) (library
    fundamentals TS v3)
  
   noexcept(/*see below*/);
  
   scope_success( const scope_success& ) = delete; (3) (library
    fundamentals TS v3)
  
   Creates a scope_success from a function, a function object or another
    scope_success.
  
   1) Initializes the exit function with a function or function object, and
    initializes
  
   the counter of uncaught exceptions as if with std::uncaught_exceptions(). The
  
   constructed scope_success is active.
  
   If Fn is not an lvalue reference type and
    std::is_nothrow_constructible_v<EF, Fn> is
  
   true, the stored EF is initialized with std::forward<Fn>(fn); otherwise
    it is
  
   initialized with fn.
  
   This overload participates in overload resolution only if
  
   std::is_same_v<std::remove_cvref_t<Fn>, scope_success> is false
    and
  
   std::is_constructible_v<EF, Fn> is true.
  
   The program is ill-formed if function call expression fn() is ill-formed.
  
   The behavior is undefined if calling fn() results in undefined behavior, even
    if fn
  
   has not been called.
  
   2) Move constructor. Initializes the stored EF with the one in other, and
  
   initializes the counter of uncaught exceptions with the one in other. The
  
   constructed scope_success is active if and only if other is active before the
  
   construction.
  
   If std::is_nothrow_move_constructible_v<EF> is true, initializes stored
    EF (denoted
  
   by exitfun) with std::forward<EF>(other.exitfun), otherwise initializes
    it with
  
   other.exitfun.
  
   After successful move construction, other.release() is called and other
    becomes
  
   inactive.
  
   This overload participates in overload resolution only if
  
   std::is_nothrow_move_constructible_v<EF> is true or
    std::is_copy_constructible_v<EF>
  
   is true.
  
   The behavior is undefined if
  
   * std::is_nothrow_move_constructible_v<EF> is true and EF does not meet
    the
  
   requirements of MoveConstructible, or
  
   * std::is_nothrow_move_constructible_v<EF> is false and EF does not
    meet the
  
   requirements of CopyConstructible.
  
   3) scope_success is not CopyConstructible.
Parameters¶
 fn - function or function object used for initializing the stored
    EF
  
   other - scope_success to move from
Exceptions¶
Any exception thrown during the initialization of the stored EF.
  
   1)
  
   noexcept specification:
  
   noexcept(std::is_nothrow_constructible_v<EF, Fn> ||
  
   std::is_nothrow_constructible_v<EF, Fn&>)
  
   2)
  
   noexcept specification:
  
   noexcept(std::is_nothrow_move_constructible_v<EF> ||
  
   std::is_nothrow_copy_constructible_v<EF>)
Example¶
 This section is incomplete
  
   Reason: no example
See also¶
 uncaught_exception
  
   uncaught_exceptions checks if exception handling is currently in progress
  
   (removed in C++20) (function)
  
   (C++17)
  
   release makes the scope_success inactive
  
   (public member function)
| 2022.07.31 | http://cppreference.com |