Из того, что я понимаю, стандартное расположение позволяет три вещи:
Теперь в библиотеке есть is_standard_layout
метафункция предиката, но я не вижу большой пользы для него в универсальном коде, поскольку перечисленные выше функции C, по-видимому, крайне редко нуждаются в проверке в универсальном коде. Единственное, о чем я могу думать, это использовать его внутри static_assert
, но это только для того, чтобы сделать код более надежным и не обязательным.
Как is_standard_layout
полезно? Существуют ли вещи, которые были бы невозможны без него, и поэтому требовались бы в стандартной библиотеке?
Это способ проверки предположений. Вы не хотели бы писать код, который предполагает стандартную компоновку, если бы это было не так.
C ++ 11 предоставляет несколько таких утилит. Они особенно полезны для написания универсального кода (шаблонов), где в противном случае вам пришлось бы доверять клиентскому коду, чтобы не допустить ошибок.
is_standard_layout
Для меня это выглядит как (псевдокод) определение is_pod
будет примерно …
// note: applied recursively to all members
bool is_pod(T) { return is_standard_layout(T) && is_trivial(T); }
Итак, вам нужно знать is_standard_layout
для того, чтобы реализовать is_pod
, Учитывая это, мы могли бы также разоблачить is_standard_layout
как инструмент, доступный для разработчиков библиотеки. Также обратите внимание: если у вас есть сценарий использования для is_pod
Вы можете рассмотреть возможность того, что is_standard_layout
на самом деле может быть лучшим (более точным) выбором в этом случае, поскольку POD, по сути, является подмножеством стандартной компоновки.
У меня такое ощущение, что они добавили каждый возможный вариант оценки типа, независимо от какой-либо очевидной ценности, на тот случай, если кто-то может столкнуться с необходимостью за некоторое время до выхода следующего стандарта. Я сомневаюсь, что нагромождение этих «лишних» свойств типов добавляет значительную дополнительную нагрузку разработчикам компиляторов.
Здесь приятно обсудить стандартное расположение: Почему C ++ 11 POD "стандартное расположение" определение так оно и есть?
На cppreference.com также есть много хороших деталей: Нестатические члены данных
Других решений пока нет …