Кавычка означает, что вы не можете изменить возвращаемое значение operator[]( size() )
, даже если значение правильно определено. То есть вы не должны изменять терминатор NUL в строке даже через неконстантную перегрузку.
Это в основном ваш первый вариант: то есть pos >= size()
, но из-за требования pos <= size()
единственное возможное значение для этого условия - pos == size()
.
Фактическое английское описание предложения может быть неоднозначным (по крайней мере, для меня), но Приложение C, и в частности C.2.11, касается изменений в семантике в библиотеке строк, и нет никаких упоминаний об этом изменении это сломало бы пользовательский код. В C ++ 03 «ссылочное значение не должно быть изменено» бит отсутствует и отсутствует двусмысленность. Отсутствие упоминания в C.2.11 не является нормативным, но может использоваться как намек на то, что когда они писали стандарт, не было намерения изменить это конкретное поведение.