Когда вы пишете BitSet{}
, создается временный объект, тип которого BitSet
.Но std::bitset
operator[]
для неконстантных объектов равно не constexpr!
В вашем первом примере s1
неявно const
, поэтомуон использует const operator[]
, равный constexpr
.
Поскольку вы не можете const
квалифицировать временный объект напрямую (например, const Foo()
недопустимо), вы всегда можете просто добавить const
в свой псевдоним:
using BitSet = const std::bitset<5>;