Exemplo:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
Eu recebo o seguinte erro ao compilar isso:
<source>: In function 'int main()':
<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'
func(clr);
^~~
Eu acho que a variável ( clr
) para a qual passo func(unsigned int&)
é um lvalue. Posso obter o endereço clr
e atribuir outro valor a ele. Por que ele se transforma em um rvalue quando tento passar para ele func(unsigned int&)
?
@ NathanOliver-ReinstateMonica Na minha opinião original, acho que
—
31419 Koen
typedef enum
não é um tipo nativo, e o C ++ o trataria como um unsigned int
tipo de fato.
A mensagem de erro do GCC é abaixo do ideal neste caso. O Clang dará uma mensagem menos confusa imprimindo o tipo original de
—
Cpplearner 31/12/19
clr
.
@ cpplearner sim, é por isso que eu pensei que
—
Koen
enum type
é tratar como unsigned int
em C ++.
enum X
é de seu próprio tipo, diferente deint
enum
aunsigned int
?