Section: 23.3.3 [array], 22.9.2 [template.bitset] Status: CD1 Submitter: Daniel Krügler Opened: 2007-08-25 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [array].
View all issues with CD1 status.
Discussion:
bool array<T,N>::empty() const
should be a
constexpr
because this is easily to proof and to implement following it's operational
semantics defined by Table 87 (Container requirements) which says: a.size() == 0
.
bool bitset<N>::test() const
must be a
constexpr
(otherwise it would violate the specification of constexpr
bitset<N>::operator[](size_t) const
, because it's return clause delegates to test()
).
bitset<N>::bitset(unsigned long)
can
be declared as a constexpr
. Current implementations usually have no such bitset
c'tor which would fulfill the requirements of a constexpr
c'tor because they have a
non-empty c'tor body that typically contains for-loops or memcpy
to compute the
initialisation. What have I overlooked here?
[ Sophia Antipolis: ]
We handle this as two parts
- The proposed resolution is correct; move to ready.
- The issue points out a real problem, but the issue is larger than just this solution. We believe a paper is needed, applying the full new features of C++ (including extensible literals) to update
std::bitset
. We note that we do not consider this new work, and that is should be handled by the Library Working Group.In order to have a consistent working paper, Alisdair and Daniel produced a new wording for the resolution.
Proposed resolution:
In the class template definition of 23.3.3 [array]/p. 3 change
constexpr bool empty() const;
In the class template definition of 22.9.2 [template.bitset]/p. 1 change
constexpr bool test(size_t pos ) const;
and in 22.9.2.3 [bitset.members] change
constexpr bool test(size_t pos ) const;