cpp / latest / utility / basic_stacktrace / basic_stacktrace.html /

std::basic_stacktrace<Allocator>::basic_stacktrace

basic_stacktrace() noexcept(/* see below */);
(1) (since C++23)
explicit basic_stacktrace( const allocator_type& alloc ) noexcept;
(2) (since C++23)
basic_stacktrace( const basic_stacktrace& other );
(3) (since C++23)
basic_stacktrace( basic_stacktrace&& other ) noexcept;
(4) (since C++23)
basic_stacktrace( const basic_stacktrace& other,
                  const allocator_type& alloc );
(5) (since C++23)
basic_stacktrace( basic_stacktrace&& other, const allocator_type& alloc );
(6) (since C++23)

Constructs an empty basic_stacktrace, or copy/move from other.

1) Default constructor. Constructs an empty basic_stacktrace with a default-constructed allocator.
2) Constructs an empty basic_stacktrace using alloc as the allocator.
3) Copy constructor. Constructs a basic_stacktrace with the copy of the contents of other, the allocator is obtained as if by calling std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()).
4) Move constructor. Constructs a basic_stacktrace with the contents of other using move semantics. Allocator is move-constructed from that of other. After construction, other is left in a valid but unspecified state.
5) Same as the copy constructor, except that alloc is used as the allocator.
6) Behaves same as the move constructor if alloc == other.get_allocator(). Otherwise, allocates memory with alloc and performs element-wise move. alloc is used as the allocator.

(3,5,6) may throw an exception or construct an empty basic_stacktrace on allocation failure.

Parameters

alloc - allocator to use for all memory allocations of the constructed basic_stacktrace
other - another basic_stacktrace to copy/move from

Exceptions

1)
noexcept specification:
noexcept(std::is_nothrow_default_constructible_v<allocator_type>)
3,5,6) May propagate the exception thrown on allocation failure.

Complexity

1-2) Constant.
3) Linear in size of other.
4) Constant.
5) Linear in size of other.
6) Linear in size of other if alloc != other.get_allocator(), otherwise constant.

Notes

After container move construction (overload (4)), references, pointers, and iterators (other than the end iterator) to other remain valid, but refer to elements that are now in *this. The current standard makes this guarantee via the blanket statement in [container.requirements.general]/12, and a more direct guarantee is under consideration via LWG 2321.

Example

See also

(C++23)
assigns to the basic_stacktrace
(public member function)
[static] (C++23)
obtains the current stacktrace or its given part
(public static member function)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/basic_stacktrace/basic_stacktrace