Template Metaprogramming Techniques
for Concept-Based Specialization
 
 
Bruno Bachelet, Loïc Yon
(LIMOS, Clermont-Ferrand, France)
 
Antoine Mahul
(CRRI, Clermont Université, Clermont-Ferrand, France)
 
Research Report LIMOS/RR10-18
Laboratoire d'Informatique, de Modélisation et d'Optimisation des Systèmes
Université Blaise Pascal
Clermont-Ferrand, France
December 7, 2010
 

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 report therefore describes 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.

The , that stands for "Concepts for Template Specialization in C++", implements the solution presented in this report.