46 ThreadLocalScope(ThreadLocalScope&&) =
delete;
47 ThreadLocalScope& operator=(ThreadLocalScope&&) =
delete;
48 ~ThreadLocalScope() =
default;
51 VariableType&
operator*() &
noexcept USERVER_IMPL_LIFETIME_BOUND;
54 VariableType*
operator->() &
noexcept USERVER_IMPL_LIFETIME_BOUND;
57 explicit ThreadLocalScope(VariableType& variable)
noexcept;
60 VariableType& operator*() &&
noexcept =
delete;
63 VariableType* operator->() &&
noexcept =
delete;
67 static_assert(!std::is_reference_v<VariableType>);
68 static_assert(!std::is_const_v<VariableType>);
70 VariableType& variable_;
128class ThreadLocal final {
129 static_assert(std::is_empty_v<Factory>);
130 static_assert(std::is_same_v<VariableType, std::invoke_result_t<
const Factory&>>);
133 consteval ThreadLocal()
134 : factory_(Factory{})
137 consteval ThreadLocal(Factory factory)
141 ThreadLocalScope<VariableType> Use() {
return ThreadLocalScope<VariableType>(impl::ThreadLocal(factory_)); }
148 [[no_unique_address]] Factory factory_;