18 m_Constructed(
false) {}
20 out(
const out&) =
delete;
30 template<
typename U,
typename = std::enable_if_t<std::is_assignable_v<T&, U>>>
33 m_Value = std::forward<U>(arg);
68 template<
typename U,
typename = std::enable_if_t<std::is_assignable_v<T&, U>>>
71 m_Value = std::forward<U>(arg);
89 using in = std::conditional_t<(
sizeof(T) <= 16 && std::is_trivially_copy_constructible_v<T>), std::add_const_t<T>, std::add_lvalue_reference_t<std::add_const_t<T>>>;
94 template<
typename Stream,
typename T>
95 using inout = std::conditional_t<Stream::writing, in<T>, std::add_lvalue_reference_t<T>>;
101 template<
typename Lambda>
105 constexpr finally(Lambda func) noexcept :
117 template<
typename Lambda>
#define BS_BREAKPOINT()
Definition assert.h:17
Test type.
Definition parameter.h:103
~finally()
Definition parameter.h:108
Definition parameter.h:59
BS_CONSTEXPR T * operator->() noexcept
Definition parameter.h:76
BS_CONSTEXPR T & operator*() noexcept
Definition parameter.h:78
BS_CONSTEXPR out(T &value) noexcept
Definition parameter.h:61
BS_CONSTEXPR out & operator=(U &&arg) noexcept(std::is_nothrow_assignable_v< T &, U >)
Definition parameter.h:69
Definition bounded_range.h:28
std::conditional_t<(sizeof(T)<=16 &&std::is_trivially_copy_constructible_v< T >), std::add_const_t< T >, std::add_lvalue_reference_t< std::add_const_t< T > > > in
Passes by const or const reference depending on size.
Definition parameter.h:89
std::conditional_t< Stream::writing, in< T >, std::add_lvalue_reference_t< T > > inout
Passes by reference.
Definition parameter.h:95