Реализации std::tuple
в libstdС++ и libС++ используют (я полагаю) пустую оптимизацию базового класса для сжатия пустых элементов:
struct empty {};
static_assert(sizeof(std::tuple<int, empty>) == sizeof(int), ""); // (1)
Мой вопрос в том, просто ли это поведение, установленное стандартом? То есть, могу ли я полагаться (1) всегда быть истинным для стандартно-совместимой реализации?