Non riesco a immaginare perché sia stato scelto che std::bitset::size
non sia statico. Rende molto più difficile ottenere una dimensione constexpr
; devi scrivere qualcosa del genere:Perché std :: bitset :: size non statico
template<int val>
struct int_
{
static const constexpr value = val;
};
template<size_t size>
auto getBitsetSizeIMPL(std::bitset<size>)
{
return int_<size>{};
}
template<typename BitsetType>
constexpr size_t getBitsetSize()
{
return decltype(getBitsetSizeIMPL(BitsetType{}))::value;
}
Quando se fosse statico tutto quello che avrebbe dovuto fare sarebbe
BitsetType::size()
e non ci sarebbe alcun sacrificio di funzionalità.
C'è una ragione storica che mi manca o c'è un fatto tecnico che mi manca?
FWIW, si può fare 'BitsetType {} size()'.. – cpplearner
Vero! Non ci ho pensato. Questo è molto meglio. Ma ancora, per qualsiasi motivo non può essere statico? –
Lo stesso motivo per cui 'std :: array :: size' non è statico, immagino. Qualcuno stava chiedendo di quella settimana scorsa. –