Могут ли гуру стандартов на С++ просветить меня:
С какой стандартной версией С++ этот оператор не сработал, потому что (v)
кажется эквивалентным (*&v)
?
т.е. например код:
#define DEC(V) ( ((V)>0)? ((V)-=1) : 0 )
...{...
register int v=1;
int r = DEC(v) ;
...}...
Теперь это вызывает предупреждения в -std=c++17
, например:
не может принимать адрес переменной регистра
левая сторона операнда должна быть lvalue
Многие макросы C заключают в круглые скобки ВСЕ макроопределения, из которых приведенное выше означает только типичный пример.
Фактические макросы, которые вызывают предупреждения, например,
макрос RTA_*
в /usr/include/linux/rtnetlink.h
.
Если вы не используете/не переопределяете эти макросы в С++, существует ли какое-либо обходное решение?