Может ли статическая переменная-член constexpr ссылаться на свой собственный адрес?

#c #scope #initialization #language-lawyer #constexpr

Вопрос:

Я недавно хотел написать такой код:

 struct FunnyBusiness {
    static constexpr const void *IDENTITY = (const void *)amp;IDENTITY;
};
 

Однако GCC (10.2) отклоняет этот код («ИДЕНТИФИКАТОР не был объявлен в этой области»), в то время как Clang (11.0) компилирует его просто отлично.

Допустимо ли, чтобы инициализатор static constexpr переменной-члена принимал адрес самой переменной-члена?

Комментарии:

1. Это не имеет никакого отношения к делу constexpr . gcc также не будет компилировать это: struct FunnyBusiness { inline static void *IDENTITY = amp;IDENTITY; }; , см.: wandbox.org/permlink/7dALAZIaJ39JYfA1