Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Correct way to initialize a container of std::byte

Tags:

c++

c++17

stl

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?

like image 518
mmatous Avatar asked Jul 18 '17 16:07

mmatous


1 Answers

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);
like image 87
Rakete1111 Avatar answered Oct 10 '22 14:10

Rakete1111