Ответ 1
который указывает на объект с продолжительностью хранения, отличный от статического
- Вы исключили нулевые указатели
- Вы исключили функциональные указатели
Из стандарта 5.20\5:
(5.2), если объект или подобъект имеет тип указателя, он содержит адрес объекта со статической продолжительностью хранения, адрес после конца такого объекта (5.7), адрес функции или нуль значение указателя
- Вы опустили понятие ссылок как членов в объектах. Что с ними делать? Вы можете взять const ссылку на объект выполнения или статический объект. Это делает весь объект
core constant expression
или нет?
(5.1) каждый нестатический элемент данных ссылочного типа относится к объекту, который является допустимым результатом постоянного выражения
Я уверен, что существует дополнительный нюанс с glvalue core constant expression
и prvalue core constant expression
(как я понимаю, эта фраза исключает некоторые из xvalue
), но я не понимаю ее. Я надеюсь, что кто-то объяснит это.
Постоянное выражение представляет собой либо выражение константы основного значения glvalue, значение которого относится к объекту, который является допустимым результатом константного выражения (как определено ниже), или константным выражением основного значения prvalue, value - это объект
ИЗМЕНИТЬ
Так в чем проблема? Существуют и другие правила, вы знаете: 5,20\2,7, 2,9, 2,13, 2,19, 2,5; и т.д.; )
Да, 5.20/2.9 относится к ссылкам (другие упомянутые правила не относятся к ссылочным типам - как я их понимаю). Давайте прочитаем его.
(2) Условное выражение e является выражением постоянной константы, если оценка e, следуя правилам абстрактной машины ( 1.9), оценивает одно из следующих выражений:
(2.9) id-выражение, которое ссылается на переменную или элемент данных ссылочный тип, если ссылка не имеет предшествующей инициализации и либо
- (2.9.1) инициализируется постоянным выражением или - (2.9.2) это нестатический член данных объекта, время жизни началось с оценки e;
Теперь сравните свое правило и стандарты. Стандарт добавляет некоторые подробности в 5.20/2.9.
5,20/5
(5.1) каждый нестатический элемент данных ссылочного типа относится к объекту, который является допустимым результатом постоянного выражения
Сущность является допустимым результатом постоянного выражения, если это объект со статической продолжительностью хранения, который либо не является временным объектом, либо является временным объектом, значение которого удовлетворяет приведенным выше ограничениям, либо оно является функцией.
- снова мы видим упоминание
functions
(например, с указателями) - ваше правило (на основе 5.20/2.9) не имеет этого. - в вашем правиле нет упоминания о
object with static storage duration