table of contents
        
      
      
    | std::experimental::scope_exit::scope_exit(3) | C++ Standard Libary | std::experimental::scope_exit::scope_exit(3) | 
NAME¶
std::experimental::scope_exit::scope_exit - std::experimental::scope_exit::scope_exit
Synopsis¶
 template <class Fn>
  
   explicit scope_exit( Fn&& fn ) noexcept(/*see (1) (library
    fundamentals TS v3)
  
   below*/);
  
   scope_exit( scope_exit&& other ) noexcept(/*see (2) (library
    fundamentals TS v3)
  
   below*/);
  
   scope_exit( const scope_exit& ) = delete; (3) (library
    fundamentals TS v3)
  
   Creates a scope_exit from a function, a function object or another
    scope_exit.
  
   1) Initializes the exit function with a function or function object. The
    constructed
  
   scope_exit 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.
  
   If initialization of the stored EF throws an exception, calls fn().
  
   This overload participates in overload resolution only if
  
   std::is_same_v<std::remove_cvref_t<Fn>, scope_exit> 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() throws an exception or results in
  
   undefined behavior, even if fn has not been called.
  
   2) Move constructor. Initializes the stored EF with the one in other. The
  
   constructed scope_exit 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_exit is not CopyConstructible.
Parameters¶
 fn - function or function object used for initializing the stored
    EF
  
   other - scope_exit 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¶
 release makes the scope_exit inactive
  
   (public member function)
| 2022.07.31 | http://cppreference.com |