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