Existe uma razão, simples o suficiente para explicar aos advogados que não são linguistas, por que as inicializações comentadas falham na compilação enquanto a primeira é bem-sucedida?
#include <cstddef>
void test() {
std::byte a{42};
//std::byte b = {42};
//std::byte c[]{48, 49};
}
Código em https://godbolt.org/z/nGfzjnh4f
O erro é:
error: cannot initialize a variable of type 'std::byte' with an rvalue of type 'int'
Porque
std::byte
é uma inicialização de lista diretaenum class
estd::byte b = {42}
não é a única sintaxe permitida aqui, uma vez que usa as regras de inicialização de classe enum relaxadas do C++ 17 :(ênfase minha)
E como
std::byte b = {42}
não atende ao primeiro requisito, obtemos o erro mencionado.