Почему std :: bitset <5> {} [0] не является constexpr? - PullRequest
0 голосов
/ 08 февраля 2019

std :: bitset имеет конструктор constexpr и оператор constexpr [], поэтому следующий код успешно компилируется:

#include <bitset>

typedef std::bitset<5> BitSet;

constexpr BitSet s1;
static_assert(!s1[0]);

купить, почему следующий код не работает?

static_assert(BitSet{}[0]);

1 Ответ

0 голосов
/ 08 февраля 2019

Когда вы пишете BitSet{}, создается временный объект, тип которого BitSet.Но std::bitset operator[] для неконстантных объектов равно не constexpr!

В вашем первом примере s1 неявно const, поэтомуон использует const operator[], равный constexpr.

Поскольку вы не можете const квалифицировать временный объект напрямую (например, const Foo() недопустимо), вы всегда можете просто добавить const в свой псевдоним:

using BitSet = const std::bitset<5>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...