Created on 2010-03-07.00:00:00 last changed 172 months ago
Proposed resolution:
explicit bitset(const char *str);template <class charT> explicit bitset( const charT *str, typename basic_string<charT>::size_type n = basic_string<charT>::npos, charT zero = charT('0'), charT one = charT('1'));
explicit bitset(const char *str);template <class charT> explicit bitset(const charT *str, typename basic_string<charT>::size_type n = basic_string<charT>::npos, charT zero = charT('0'), charT one = charT('1'));
Effects: Constructs an object of class
bitset<N> as if by
bitset(string(str)).
bitset(
n == basic_string<charT>::npos
? basic_string<charT>(str)
: basic_string<charT>(str, n),
0, n, zero, one)
[ Adopted at 2010-11 Batavia ]
[ Post-Rapperswil ]
The proposed resolution has two problems:
it fails to provide support for non-terminated strings, which could be easily added and constitutes an important use-case. For example, the following code would invoke UB with the current P/R:
char s[4] = { '0', '1', '0', '1' }; // notice: not null-terminated!
bitset<4> b(s, 0, 4);
because it requires the evaluation (under the as-if rule, to be fair,
but it doesn't matter) of basic_string<char>(s)
it promotes a consistency between the two bitset constructors that take a const std::string& and a const char*, respectively, while practice established by std::basic_string would recommend a different set of parameters. In particular, the constructor of std::basic_string that takes a const char* does not have a pos parameter
Moved to Tentatively Ready with revised wording provided by Alberto Ganesh Babati after 5 positive votes on c++std-lib.
[ The proposed resolution has been reviewed by Stephan T. Lavavej. ]
As mentioned on the boost mailing list:
The following code, valid in C++03, is broken in C++0x due to ambiguity between the "unsigned long long" and "char*" constructors.
#include <bitset> std::bitset<10> b(0);
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2011-08-23 20:07:26 | admin | set | status: wp -> c++11 |
| 2010-11-23 13:22:14 | admin | set | messages: + msg5403 |
| 2010-11-14 13:10:57 | admin | set | status: voting -> wp |
| 2010-11-08 14:14:39 | admin | set | status: ready -> voting |
| 2010-10-21 19:06:53 | admin | set | messages: + msg4771 |
| 2010-10-21 19:06:53 | admin | set | status: new -> ready |
| 2010-10-21 18:28:33 | admin | set | messages: + msg1603 |
| 2010-10-21 18:28:33 | admin | set | messages: + msg1602 |
| 2010-03-07 00:00:00 | admin | create | |