19#include "pw_polyfill/language_feature_macros.h"
82 template <
typename... Args,
83 typename std::enable_if<!std::is_same<void(std::decay_t<Args>&...),
87 : storage_(std::forward<Args>(args)...) {}
91 explicit constexpr NoDestructor(
const T& x) : storage_(x) {}
92 explicit constexpr NoDestructor(T&& x) : storage_(std::move(x)) {}
99 constexpr const T& operator*()
const {
return get(); }
100 constexpr T& operator*() {
return get(); }
102 constexpr const T* operator->()
const {
return &get(); }
103 constexpr T* operator->() {
return &get(); }
107 if constexpr (std::is_trivially_destructible_v<T>) {
110 return storage_.value;
114 constexpr const T& get()
const {
115 if constexpr (std::is_trivially_destructible_v<T>) {
118 return storage_.value;
122 union NonTrivialStorage {
123 template <
typename... Args>
124 constexpr NonTrivialStorage(Args&&... args)
125 : value(std::forward<Args>(args)...) {}
130 PW_CONSTEXPR_CPP20 ~NonTrivialStorage() {}
135 std::conditional_t<std::is_trivially_destructible_v<T>, T, NonTrivialStorage>
Definition: no_destructor.h:75
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27