What is the correct way of initializing a container with predetermined std::byte values?
std::array<std::byte, 2> arr{0x36, 0xd0}
for array results in
Enum std::byte has not constant to represent the integer value of X
and compiler errors. Vector and initializer lists are a no-go too.
Is std::vector with std::copy and casts really the intended way of handling this?
You will have to write std::byte{0x36}
, because there is no implicit conversion from an int
to a enum class
.
std::array<std::byte, 2> arr = {std::byte{0x36}, std::byte{0xd0}};
If you don't want to write std::byte
every single time, write a helper function:
template<typename... Ts>
std::array<std::byte, sizeof...(Ts)> make_bytes(Ts&&... args) noexcept {
return{std::byte(std::forward<Ts>(args))...};
}
auto arr = make_bytes(0x36, 0xd0);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With