MSDN считает, что анонимные структуры не являются стандартными в С++:
Расширение Microsoft C позволяет объявлять структурную переменную в пределах другой структуры, не указывая на это имя. Эти вложенные структуры называются анонимными структурами. С++ не позволяет анонимные структуры.
Вы можете получить доступ к членам анонимной структуры, как если бы они были членов в содержащей структуре.
Мне говорят, что эта функция не обязательно такая же, как просто создание неназванной структуры, но я не вижу различия в терминах стандартной формулировки.
С++ 11 говорит:
[C++11: 9/1]
: [..] Спецификатор класса, чей класс-руководитель опускает имя класса-head, определяет неназванный класс.
и предоставляет целую грамматическую конструкцию для определения типа без имени.
С++ 03 не имеет этой явной формулировки, но аналогичным образом указывает, что identifier
в определении типа является необязательным и ссылается на "неназванные классы" в 9.4.2/5
и 3.5/4
.
- Так MSDN ошибочно, и все это полностью стандартно?
- Или есть какая-то тонкость, которую я пропускаю между "неназванными структурами/классами" и тем же, когда они используются в качестве элементов, которые мешают им быть охвачены этой функциональностью С++ 03/С++ 11?
- Не хватает ли какой-либо фундаментальной разницы между "неназванной структурой" и "анонимной структурой"? Они похожи на синонимы.