(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?

questionAnswers(3)

yourAnswerToTheQuestion