Этот код имеет поведение undefined в С++ 98. Является ли это законным в С++ 11?
Ответ 1
Да, код является законным в С++ 11, потому что хранилище для std::string гарантировано будет смежным, и ваш код избегает перезаписывания завершающего символа NULL (или инициализированного значения CharT).
1 Требуется: pos <= size(). 2 Возвращает: *(begin() + pos), если pos < size(). В противном случае возвращается ссылка на объект типа CharT со значением charT(), где изменение объекта приводит к поведению undefined.
Ваш пример удовлетворяет требованиям, указанным выше, поэтому поведение корректно определено.