CodeNebula
C++26stlexpert

std::text_encoding (C++26 Addition)

C++26 · The Next Frontier · Compiler flag: -std=c++26

Explanation

Provides facilities for handling text encodings (e.g., UTF-8, UTF-16).

Real-World Scenario

Process multilingual text in a globalized application.

Quick Snippet

snippet.cpp
#include <text_encoding> auto enc = std::text_encoding::utf8();

Full Example

text_encoding.cpp
// CodeNebula - C++26 Example: std::text_encoding
// Compile: g++ -std=c++26 -Wall -Wextra -o example text_encoding.cpp
// Note: Requires C++26 compiler support (GCC 15+ / Clang 19+ expected)

// C++26 introduces std::text_encoding for querying and working with
// character encodings. It provides compile-time and runtime access to
// the system's text encoding (literal, wide, environment encodings).

#include <iostream>
#include <string>
#include <string_view>

// --- C++26 std::text_encoding Syntax ---
//
// #include <text_encoding>
//
// // Query the literal encoding (what the compiler uses for string literals)
// auto lit_enc = std::text_encoding::literal();
// std::cout << lit_enc.name();        // e.g., "UTF-8"
// std::cout << lit_enc.mib();         // IANA MIB enum value
//
// // Query the environment encoding
// auto env_enc = std::text_encoding::environment();
//
// // Compare encodings
// if (lit_enc == std::text_encoding::id::UTF8) { /* UTF-8 */ }
//
// // Known encoding IDs
// std::text_encoding::id::UTF8;
// std::text_encoding::id::ASCII;
// std::text_encoding::id::ISO8859_1;

// --- Simulation using C++20 features ---

class text_encoding_sim {
public:
    enum class id { ASCII = 3, UTF8 = 106, ISO8859_1 = 4, UTF16 = 1015 };

    explicit text_encoding_sim(id enc) : id_(enc) {}

    std::string_view name() const {
        switch (id_) {
            case id::ASCII:     return "US-ASCII";
            case id::UTF8:      return "UTF-8";
            case id::ISO8859_1: return "ISO-8859-1";
            case id::UTF16:     return "UTF-16";
        }
        return "unknown";
    }

    int mib() const { return static_cast<int>(id_); }
    id encoding_id() const { return id_; }
    bool operator==(const text_encoding_sim& o) const { return id_ == o.id_; }

    // Simulate system queries
    static text_encoding_sim literal() { return text_encoding_sim(id::UTF8); }
    static text_encoding_sim environment() { return text_encoding_sim(id::UTF8); }

private:
    id id_;
};

int main() {
    std::cout << "=== C++26 std::text_encoding (Simulated) ===" << std::endl;

    auto lit = text_encoding_sim::literal();
    auto env = text_encoding_sim::environment();

    std::cout << "Literal encoding:  " << lit.name()
              << " (MIB=" << lit.mib() << ")" << std::endl;
    std::cout << "Environment encoding: " << env.name()
              << " (MIB=" << env.mib() << ")" << std::endl;

    std::cout << "Literal == Environment: " << std::boolalpha
              << (lit == env) << std::endl;

    // Check specific encodings
    text_encoding_sim ascii(text_encoding_sim::id::ASCII);
    text_encoding_sim utf8(text_encoding_sim::id::UTF8);
    std::cout << "\nKnown encodings:" << std::endl;
    std::cout << "  ASCII:      " << ascii.name() << " (MIB=" << ascii.mib() << ")" << std::endl;
    std::cout << "  UTF-8:      " << utf8.name() << " (MIB=" << utf8.mib() << ")" << std::endl;

    std::cout << "Is literal UTF-8? " << (lit == utf8) << std::endl;

    std::cout << "text_encoding provides portable charset detection." << std::endl;
    return 0;
}

// Expected output:
// === C++26 std::text_encoding (Simulated) ===
// Literal encoding:  UTF-8 (MIB=106)
// Environment encoding: UTF-8 (MIB=106)
// Literal == Environment: true
//
// Known encodings:
//   ASCII:      US-ASCII (MIB=3)
//   UTF-8:      UTF-8 (MIB=106)
// Is literal UTF-8? true
// text_encoding provides portable charset detection.
Run command
g++ -std=c++26 -Wall -Wextra -o example text_encoding.cpp