(v) é realmente (* & v) desde quando?
Os gurus dos padrões C ++ poderiam me esclarecer:
Desde que versão padrão do C ++ esta declaração falhou porque(v)
parece ser equivalente a(*&v)
?
I.e. por exemplo, o código:
#define DEC(V) ( ((V)>0)? ((V)-=1) : 0 )
...{...
register int v=1;
int r = DEC(v) ;
...}...
Isso agora produz avisos sob-std=c++17
gostar:
não pode receber o endereço da variável de registro
lado esquerdo do operando deve ser lvalue
Muitas macros C incluem TODOS os parâmetros de macro entre parênteses, dos quais o acima exposto deve ser apenas um exemplo representativo.
As macros reais que produzem avisos são, por exemplo, oRTA_*
macros em/usr/include/linux/rtnetlink.h
.
Além de não usar / redefinir essas macros em C ++, existe alguma solução alternativa?