44 static_assert(!std::is_void_v<T>,
"input_ptr<void> is not supported");
45 static_assert(!std::is_const_v<T>,
"input_ptr adds const access itself");
46 static_assert(!std::is_function_v<T>,
"input_ptr cannot point to a function");
59 constexpr
operator pointer() const noexcept
64 [[nodiscard]] constexpr
const T&
operator*() const noexcept
74 [[nodiscard]] constexpr
const T&
operator[](std::ptrdiff_t index)
const noexcept
80 const T* ptr_ =
nullptr;
99 static_assert(!std::is_void_v<T>,
"output_ptr<void> is not supported");
100 static_assert(!std::is_const_v<T>,
"output_ptr requires mutable elements");
101 static_assert(!std::is_function_v<T>,
"output_ptr cannot point to a function");
129 [[nodiscard]] constexpr T&
operator[](std::ptrdiff_t index)
const noexcept
138 static_assert(std::is_trivially_copyable_v<input_ptr<int>>,
139 "input_ptr must remain trivially copyable");
140 static_assert(std::is_standard_layout_v<input_ptr<int>>,
141 "input_ptr must remain standard-layout");
142 static_assert(
sizeof(input_ptr<int>) ==
sizeof(
const int*),
143 "input_ptr must remain pointer-sized");
146 static_assert(std::is_trivially_copyable_v<output_ptr<int>>,
147 "output_ptr must remain trivially copyable");
148 static_assert(std::is_standard_layout_v<output_ptr<int>>,
149 "output_ptr must remain standard-layout");
150 static_assert(
sizeof(output_ptr<int>) ==
sizeof(
int*),
151 "output_ptr must remain pointer-sized");
Pointer to a kernel output buffer.
constexpr T & operator[](std::ptrdiff_t index) const noexcept
constexpr output_ptr() noexcept=default
constexpr pointer operator->() const noexcept
constexpr T & operator*() const noexcept
static constexpr bool reads_existing_data
static constexpr bool writes_result