Раздел 6.5.3.2 # 3 говорит об унарном операторе &
, а 6.5.3.2 # 4 - об унарном операторе *
.Они имеют различное поведение.
Разработка ( из комментария ):
Дело в том, что унарный &
не приводит к lvalue, даже в случае, когда онсчитается опущенным, потому что он непосредственно предшествует унарному *
в контексте разыменования.Тот факт, что оба оператора считаются опущенными, не меняет того факта, что полученное выражение не является lvalue;Точно так же не было бы, если бы применялись одиночные унарные &
.
int a;
&a = ...;
не является законным (очевидно).Но и то, и другое не является
int a;
&*a = ...;
То, что они считаются опущенными, не означает, что &*
эквивалентно lvalue по отношению к соло a
.