19#include "pw_polyfill/language_feature_macros.h"
80 template <
typename... Args,
81 typename std::enable_if<!std::is_same<void(std::decay_t<Args>&...),
85 : storage_(std::forward<Args>(args)...) {}
89 explicit constexpr NoDestructor(
const T& x) : storage_(x) {}
90 explicit constexpr NoDestructor(T&& x) : storage_(std::move(x)) {}
97 constexpr const T& operator*()
const {
return get(); }
98 constexpr T& operator*() {
return get(); }
100 constexpr const T* operator->()
const {
return &get(); }
101 constexpr T* operator->() {
return &get(); }
105 if constexpr (std::is_trivially_destructible_v<T>) {
108 return storage_.value;
112 constexpr const T& get()
const {
113 if constexpr (std::is_trivially_destructible_v<T>) {
116 return storage_.value;
120 union NonTrivialStorage {
121 template <
typename... Args>
122 constexpr NonTrivialStorage(Args&&... args)
123 : value(std::forward<Args>(args)...) {}
128 PW_CONSTEXPR_CPP20 ~NonTrivialStorage() {}
133 std::conditional_t<std::is_trivially_destructible_v<T>, T, NonTrivialStorage>
Definition: no_destructor.h:73
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27