String handling

string_view rules, to_chars, format/print, encodings.

Raw string literals, u16/u32 literals, std::to_string. Conversion and formatting remain split across iostreams, sprintf and stoi — the weak spot of the era.

const char* re = R"((d+)-(d+))";   // raw literal: no escape soup

"..."s literals from std::string_literals; heterogeneous lookup starts removing temporary-string churn around containers.

std::string_view changes every read-only signature (with the dangling rule: never store one past the owner), and to_chars/from_chars finally give locale-free, non-throwing, fast numeric conversion.

int value{};
auto [p, ec] = std::from_chars(s.data(), s.data() + s.size(), value);
if (ec != std::errc{}) fail();

starts_with/ends_with, char8_t separates UTF-8 from char, and std::format replaces the iostream/sprintf split with type-safe, extensible formatting.

auto line = std::format("{:>8} | {:.2f}", name, ratio);

contains, resize_and_overwrite (write into a string without zero-fill), formatting ranges directly, and std::print/println as the output endpoint.

std::println("lanes = {}", std::vector{1, 2, 3});   // ranges format (C++23)

std::text_encoding names and queries the literal/runtime encodings — the first standard vocabulary for the encoding question that was previously all convention.

C++29direction · not adopted

Direction: deeper Unicode support (proper text segmentation/transcoding APIs) remains SG16's declared long-term goal.

C++26 per the final working draft; C++29 rows are proposals and direction, not adopted features.