38 std::is_trivially_copyable_v<T> && std::is_trivially_destructible_v<T>;
40template <
typename Real>
41inline constexpr bool enable_uninitialized_storage<uni20::detail::standard_complex<Real>> =
42 std::is_trivially_destructible_v<uni20::detail::standard_complex<Real>>;
52inline constexpr bool zero_initializable_v = [] {
53 if constexpr (is_complex_v<T>)
55 using real_type =
typename T::value_type;
56 return requires { T{real_type{0}, real_type{0}}; };
58 else if constexpr (is_scalar_v<T>)
60 return requires { T{0}; };
64 return requires { T{}; };
69 requires zero_initializable_v<T>
72 if constexpr (is_complex_v<T>)
74 using real_type =
typename T::value_type;
75 return T{real_type{0}, real_type{0}};
77 else if constexpr (is_scalar_v<T>)
88inline constexpr bool has_signaling_nan_v = [] {
89 if constexpr (is_complex_v<T>)
91 return has_signaling_nan_v<typename T::value_type>;
93 else if constexpr (is_real_v<T>)
105 requires has_signaling_nan_v<T>
106T signaling_nan_value()
108 if constexpr (is_complex_v<T>)
124template <
typename T>
void initialize_host_elements(T* data, std::size_t count,
StorageInitialization initialization)
126 if (count == 0)
return;
129 if constexpr (!zero_initializable_v<T>)
131 throw std::invalid_argument(
"Zero initialization requires an element type with a zero/default value");
133 else if constexpr (std::is_assignable_v<T&, T>)
135 for (std::size_t i = 0; i < count; ++i)
136 data[i] = zero_value<T>();
140#if UNI20_FILL_UNINITIALIZED_SNAN
143 std::fill_n(data, count, signaling_nan_value<T>());
148 memory_diagnostics::mark_uninitialized(data, count *
sizeof(T));
Whether raw allocation may establish storage for T without construction.
Definition common/initialization.hpp:46
locale_t value
Definition data_table.cpp:49
Definition async/async.hpp:26
constexpr uninitialized_t uninitialized
Explicit allocation tag for overwrite outputs and scratch space.
Definition common/initialization.hpp:22
constexpr bool enable_uninitialized_storage
Opt a type into allocation without construction or destruction.
Definition common/initialization.hpp:37
StorageInitialization
Numerical initialization requested from a storage implementation.
Definition common/initialization.hpp:26
Project-level numeric limits customization point.
Definition numeric_limits.hpp:16
Request storage whose numerical values must be written before being read.
Definition common/initialization.hpp:17
constexpr uninitialized_t()=default