Ответ 1
Это не то, что влияет на соответствие. Стандартным программам на С++ не разрешается использовать _Mysize
в любом контексте, даже не проверять, существует ли такой член в любом стандартном типе библиотеки. Тот факт, что вы это делаете, в любом случае означает, что стандарт не налагает никаких требований на поведение вашей программы.
2.11 Идентификаторы [lex.name]
3 Кроме того, некоторые идентификаторы зарезервированы для использования реализацией С++ и стандартными библиотеками (17.6.4.3.2) и не должны использоваться иначе; диагностика не требуется.
17.6.4.3.2 Глобальные имена [global.names]
1 Определенные наборы имен и сигнатур функций всегда зарезервированы для реализации:
- Каждое имя, содержащее двойной знак подчеркивания
__
или начинающийся с символа подчеркивания, за которым следует заглавная буква (2.12), зарезервировано для реализации для любого использования.
В некоторых случаях это может облегчить для MS создание высокооптимизированных специальных функций, не являющихся членами, в дополнительных заголовках, которые не существовали во время начальной версии, без изменения исходных заголовков. Это один из немногих случаев, когда прямой доступ к внутренним классам является оправданным, а также один из случаев, когда новые функции не могут быть объявлены friend
, поэтому, если такие функции ожидаются, разоблачение внутренних элементов может быть лучшим (read: наименее плохая) вещь, которую нужно сделать.
Поэтому я бы не стал слишком быстрым, назвав его ошибкой. Тем не менее, это сомнительное дизайнерское решение, и я бы, конечно, не предлагаю никому скопировать этот стиль.