Мне интересно почему std::bitset::reference
а также std::vector<bool>::reference
указывает явный деструктор (не сгенерированный компилятором). Потому что, например, boost::dynamic_bitset::reference
похоже, не указывать такого деструктора.
Просто потому, что стандарт упоминает ~reference()
как деструктор, не означает, что он должен быть предоставлен пользователем как неактивный {}
(что как libstdc ++ а также SGI / STL сделай это). Он также может быть объявлен пользователем как =default
или даже неявно определены (что как Libc ++ Является ли). Несмотря на это, Стандарт можно обновить, чтобы удалить это явное упоминание деструктора. Вы можете подать редакционные изменения (я не думаю, что это требует реального предложения).
Как отмечает @BoPersson в комментариях, std::bitset
это очень старый компонент стандартной библиотеки. Многие из его особенностей (неявный конструктор из целого числа без знака, член вместо не члена) operator==
) предшествовать языковой стандартизации в 1998 году. Бесстыдные пробки: см., например. этот вопрос& для дальнейшего обсуждения, как это могло произойти, и этот вопрос& почему это может нарушить код, когда это будет исправлено.
<rant mode>
Лучший выход из наследия std::bitset
будет чистый прорыв в namespace experimental
, Предпочтительно, это также решило бы смешанную абстракцию std::bitset
который в то же время пытается быть оптимизированной для космоса версией array<bool>
также как и set<int>
, В идеале, было бы предложение о bool_array<N>
и bounded_int_set<N>
это обеспечило эти абстракции. Так же, bool_vector<Alloc>
(в настоящее время известен как vector<bool, Alloc>
) а также int_set<Alloc>
(в настоящее время смесь boost::dynamic_bitset
а также boost::container::flat_set<int, Alloc>
) можно определить.
</rant mode>
Других решений пока нет …