А в чём проблема? Прочитал пропозал по диагонали (а местами внимательно), не увидел описания каких-то челленджей.
Как пример можно сравнить operator [] у basic_string для которого UB это доступ за пределами size() и тот же оператор для array, где UB это доступ к nonexistent element.
а что такое для array nonexistent element, если не индекс за пределами [0, size)?
Ну да, согласен, плохой пример, хотел сказать тоже можно получить indeterminate значения без инициализации. Но тут хуже, Char в общем случае может же быть любой, а это будет не сконструированный Char.
Ну всякие resize uninitialized первичные оставляли часть строки именно что в uninitialized state, что автоматически сказалось бы в UB на куче методов строк, т.к. у части элементов ещё не начался lifetime. А инициализация через init_op вроде как суживает этот UB до вот этой самой op которая обязана как то заполнить переданный ей range.
Дак implicit start lifetime должен это пофиксить же
Дак implicit start lifetime должен это пофиксить же
Для scalar да, но в общем случае basic string не ограничен scalar types. Да, это довольно странно, но тем не менее это приходится учитывать разработчикам стандарта, ибо "нарушает инварианты".