Xavier Lamorlette

C++ 23

Sommaire :

Déduction de this

Cela permet de ne plus recourir au Mixin (aussi connu sous le nom de CRTP : “Curiously Recurring Template Pattern”) pour faire du polymorphisme statique.

Au lieu de :

template <typename T>
class Base {
    void interface() {
        static_cast<T *>(this)->implementation();
    }
};

class Derived: Base<Derived> {
    void implementation();
};

On fait, en C++23 :

class Base {
    template <typename Self>
    void interface(this Self && self){
        self.implementation();
    }
};

class Derived: Base {
    void implementation();
};

STL

expected

std::expected permet de retourner une valeur ou une erreur :

std::expected<int, std::string> foo() {
    if … {
        return 12;
    } else {
        return std::unexpected("error text");
    }
}

auto result = foo();
if (result) {
    std::cout << "value: " << *result << std::endl;
} else {
    std::cout << "error: " << result.error() << std::endl;
}

Ajouts à optional

Dans std::optional, ajout des méthodes and_then(), or_else() et transform() qui prennent en paramètre une fonction.

Ajout à string

std::string::contains()

mdspan

std::mdspan est un “multidimensional span”.

spanstream

Un std::spanstream est un stream auquel on fournit un span à utiliser :

 char buffer[128] { 0 };
std::span span_buffer(buffer);
std::basic_spanstream span_streanm(span_buffer);
span_streanm << "foo bar";

La dernière mise à jour de cette page date de février 2024.

Le contenu de ce site est, en tant qu'œuvre originale de l'esprit, protégé par le droit d'auteur.
Pour tout commentaire, vous pouvez m'écrire à xavier.lamorlette@gmail.com.