Это ошибка в std:: get_time?

Я пытаюсь проанализировать строку даты и поставить результат в std:: tm. Ниже приведен код,

#include <iomanip>
#include <ctime>
#include <sstream>
#include <string>

std::stringstream ss;
struct std::tm when;

ss.str("8/14/2015 3:04:23 PM");
ss >> std::get_time(&when, "%m/%d/%Y %r");

После запуска кода значение when.tm_hour равно 27. Это ошибка, или я сделал что-то неправильно?

Я использую Visual Studio 2013 в Windows 7.

Спасибо.

Ответ 1

У вас возникла ошибка в реализации Microsoft функции std::num_get::do_get, в частности секции, которая анализирует часть времени AM/PM (%p):

    case 'p':
        _Ans = _Getloctxt(_First, _Last, (size_t)0, ":AM:am:PM:pm");
        if (_Ans < 0)
            _State |= ios_base::failbit;
        else
            _Pt->tm_hour += _Ans * 12;
        break;

Проблема заключается в том, что _Getloctxt возвращает int в диапазоне [0,3], а не в ожидаемом диапазоне [0,1].

Об этой ошибке сообщается Microsoft (ID: 808162), которые утверждают, что исправили ее в Visual Studio 2015.