(v) es en realidad (* & v) desde cuándo?

¿Podrían los gurús de los estándares de C ++ iluminarme?

Desde qué versión estándar de C ++ tiene esta declaración fallida porque(v) parece ser equivalente a(*&v)?

Es decir. por ejemplo el código:

 #define DEC(V) ( ((V)>0)? ((V)-=1) : 0 )
 ...{...
        register int v=1;
        int r = DEC(v) ;
 ...}...

Esto ahora produce advertencias bajo-std=c++17 me gusta:

no puede tomar la dirección de la variable de registro

el lado izquierdo del operando debe ser lvalue

Muchas macros C encierran TODOS los parámetros de macro entre paréntesis, de los cuales lo anterior solo pretende ser un ejemplo representativo.

Las macros reales que producen advertencias son, por ejemplo, lasRTA_* macros en/usr/include/linux/rtnetlink.h.

A falta de no usar / redefinir estas macros en C ++, ¿hay alguna solución?

Respuestas a la pregunta(3)

Su respuesta a la pregunta