Я думаю, что битовые поля удовлетворяют вашим условиям... Я считаю, что f.x
- это lvalue, но вы не можете взять его адрес. Интересно, что вы также не можете сделать auto & x = f.x
.
C++11, раздел 8.3.1, часть параграфа 4: Поскольку адрес битового поля (9.6) не может быть взят, указатель никогда не может указывать на битовое поле.
struct foo {
int x : 3;
int y : 3;
int z : 3;
};
int main() {
foo f;
f.x = 3;
}
Я еще менее уверен в другой идее, но стандарт говорит, что вам не разрешено использовать основную функцию. Если он используется для получения адреса main, этого также будет достаточно. C++11 3.6.1 Параграф 5.
Из комментария, который я оставил, я знаю, что TI расширяет свои компиляторы C и C++ таким образом, что существует класс хранения с именем cregister
, адрес которого нельзя взять. (Поскольку это относится к физическому регистру, в котором нет концепции адреса).
person
Bill Lynch
schedule
08.11.2012
extern cregister volatile unsigned int AMR;
, гдеAMR
относится к конкретному аппаратному регистру (в данном случае к регистру режима адресации). - person Bill Lynch   schedule 09.11.2012