c ++ 11 — Почему стандарт C ++ определяет деструктор для std :: bitset :: reference?

Мне интересно почему std::bitset::reference а также std::vector<bool>::reference указывает явный деструктор (не сгенерированный компилятором). Потому что, например, boost::dynamic_bitset::reference похоже, не указывать такого деструктора.

5

Решение

Просто потому, что стандарт упоминает ~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>

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]