зеркало из https://github.com/microsoft/STL.git
`<chrono>` LWG-3536: leave duration unchanged on failed parse (#2037)
Co-authored-by: Stephan T. Lavavej <stl@nuwen.net>
This commit is contained in:
Родитель
503823b5ad
Коммит
3c015bda0c
|
@ -4096,7 +4096,6 @@ namespace chrono {
|
|||
_NODISCARD bool _Make_duration(duration<_Rep, _Period>& _Duration_result) {
|
||||
const bool _Consistent = _Calculate_hour24();
|
||||
if (_Consistent) {
|
||||
_Duration_result = duration<_Rep, _Period>::zero(); // TRANSITION: LWG-3536 & GH-1740
|
||||
return _Apply_duration_fields<_Parse_tp_or_duration::_Duration>(_Duration_result);
|
||||
}
|
||||
|
||||
|
|
|
@ -221,6 +221,29 @@ void test_limits(const char* flag, const IntType min, const IntType max) {
|
|||
assert(value == TimeType{max});
|
||||
}
|
||||
|
||||
void test_lwg_3536() {
|
||||
// LWG-3536, "Should chrono::from_stream() assign zero to duration for failure?"
|
||||
minutes mm{20};
|
||||
|
||||
{
|
||||
istringstream iss{"2:2:30"};
|
||||
iss >> parse(string{"%H:%M:%S"}, mm);
|
||||
assert(iss.fail() && mm == 20min);
|
||||
}
|
||||
|
||||
{
|
||||
istringstream iss{"June"};
|
||||
iss >> parse(string{"%B"}, mm);
|
||||
assert(iss.fail() && mm == 20min);
|
||||
}
|
||||
|
||||
{
|
||||
istringstream iss{""};
|
||||
iss >> parse(string{"%B"}, mm);
|
||||
assert(iss.fail() && mm == 20min);
|
||||
}
|
||||
}
|
||||
|
||||
void parse_seconds() {
|
||||
seconds time;
|
||||
test_parse("1", "%S", time);
|
||||
|
@ -1182,6 +1205,7 @@ void parse_wchar() {
|
|||
}
|
||||
|
||||
void test_parse() {
|
||||
test_lwg_3536();
|
||||
parse_seconds();
|
||||
parse_minutes();
|
||||
parse_hours();
|
||||
|
|
Загрузка…
Ссылка в новой задаче