19#include "pw_polyfill/language_feature_macros.h"
84 template <
typename... Args,
85 typename std::enable_if<!std::is_same<void(std::decay_t<Args>&...),
89 : storage_(std::forward<Args>(args)...) {}
93 explicit constexpr NoDestructor(
const T& x) : storage_(x) {}
94 explicit constexpr NoDestructor(T&& x) : storage_(std::move(x)) {}
101 constexpr const T& operator*()
const {
return get(); }
102 constexpr T& operator*() {
return get(); }
104 constexpr const T* operator->()
const {
return &get(); }
105 constexpr T* operator->() {
return &get(); }
109 if constexpr (std::is_trivially_destructible_v<T>) {
112 return storage_.value;
116 constexpr const T& get()
const {
117 if constexpr (std::is_trivially_destructible_v<T>) {
120 return storage_.value;
124 union NonTrivialStorage {
125 template <
typename... Args>
126 constexpr NonTrivialStorage(Args&&... args)
127 : value(std::forward<Args>(args)...) {}
137 std::conditional_t<std::is_trivially_destructible_v<T>, T, NonTrivialStorage>
Definition: no_destructor.h:77
#define PW_CONSTEXPR_CPP20
Definition: language_feature_macros.h:27
The Pigweed namespace.
Definition: alignment.h:27