The C4TS++ library, that stands for "Concepts for Template Specialization in C++", provides an implementation for the C++ language to define concepts and refinements of concepts, and to use them to specify unambiguous specializations of generic components.

La bibliothèque C4TS++, qui signifie "Concepts for Template Specialization in C++", fournit une implémentation pour le langage C++ permettant de définir des concepts et des raffinements de concepts, et de les utiliser pour spécifier des spécialisations sans ambiguïtés de composants génériques.

In generic programming, software components are parameterized on types. When available, a static specialization mechanism allows selecting, for a given set of parameters, a more suitable version of a generic component than its primary version. The normal C++ template specialization mechanism is based on the type pattern of the parameters, which is not always the best way to guide the specialization process: type patterns are missing some information on types that could be relevant to define specializations.

The notion of a "concept", which represents a set of requirements (including syntactic and semantic aspects) for a type, is known to be an interesting approach to control template specialization. For many reasons, concepts were dropped from C++11 standard, this library is therefore based on template metaprogramming techniques for declaring concepts, "modeling" relationships (meaning that a type fulfills the requirements of a concept), and "refinement" relationships (meaning that a concept refines the requirements of another concept).

From a taxonomy of concepts and template specializations based on concepts, an automatic mechanism selects the most appropriate version of a generic component for a given instantiation. Our purely library-based solution is also open for retroactive extension: new concepts, relationships, and template specializations can be defined at any time; such additions will then be picked up by the specialization mechanism.