Это вызывает неопределенное поведение. Класс std::string
был разработан более 25 лет назад go и имеет некоторые аспекты, которые, вероятно, не вошли бы в сегодняшнюю версию языка.
Это вызывает конструктор, который принимает пару итераторов, которые должны указать начало и конец диапазона для инициализации строки, например:
char foo[] = "abcdefgh";
std::string m{foo+1, foo+4}; // "bcd"
Но в вашем случае указатели не указывают на один и тот же массив, поэтому поведение не определено.
Это конструктор # 6 в https://en.cppreference.com/w/cpp/string/basic_string/basic_string:
template< class InputIt >
constexpr basic_string( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );