Class Templates Terminology Reference

This reference provides an overview of class templates terminology you'll encounter in this chapter. Use it as a quick lookup guide.

Template Basics

Term Definition Example
Class Template Blueprint for creating classes with type parameters template<typename T> class Container { };
Template Parameter Placeholder for type or value in template typename T, int N
Template Argument Actual type or value when instantiating template Container<int>, Array<double, 10>
Template Instantiation Compiler generating concrete class from template Container<int> c; creates int version
Template Specialization Custom implementation for specific type template<> class Container<bool> { };
Explicit Instantiation Forcing compiler to generate template instance template class Container<int>;

Template Parameters

Term Definition Example
Type Parameter Template parameter representing a type template<typename T> or template<class T>
Non-type Parameter Template parameter for constant value template<int Size>, template<bool Flag>
Template Template Parameter Template parameter that is itself a template template<template<typename> class Container>
Parameter Pack Variable number of template parameters template<typename... Args>
Default Template Argument Default value for template parameter template<typename T = int>
typename Keyword Declares type parameter or dependent type name typename T::value_type

Template Member Functions

Term Definition Example
Member Function Template Template function inside class template<typename U> void convert(U value);
Template Method Regular method of template class void add(const T& value);
Template Constructor Constructor in template class Container(const T& initial);
Conversion Constructor Constructor enabling type conversion template<typename U> Container(const Container<U>&);
Out-of-class Definition Defining template member outside class template<typename T> void Container<T>::clear() { }

Specialization

Term Definition Example
Full Specialization Complete replacement for specific types template<> class Container<bool> { };
Partial Specialization Specialization for subset of types template<typename T> class Container<T*> { };
Primary Template Original unspecialized template Base template definition
Specialization for Pointer Common specialization for pointer types template<typename T> class Array<T*> { };
Function Template Specialization Specializing member function only Cannot partially specialize functions

Template Concepts and Constraints

Term Definition Example
Concept Named requirement on template parameter (C++20) template<std::integral T>
Requires Clause Boolean expression constraining template requires std::is_copy_constructible_v<T>
Type Trait Compile-time type property query std::is_integral<T>::value
SFINAE Substitution Failure Is Not An Error Used for template overload selection
enable_if Conditionally enable template instantiation std::enable_if_t<condition, T>
static_assert Compile-time assertion static_assert(sizeof(T) > 0);

Dependent Types

Term Definition Example
Dependent Name Name depending on template parameter T::value_type, Container<T>::iterator
typename Disambiguator Telling compiler name is a type typename T::value_type x;
template Disambiguator Telling compiler name is a template obj.template func<int>();
Non-dependent Name Name not depending on template parameter Known at template definition time
Two-phase Lookup Names resolved at definition and instantiation Dependent vs non-dependent lookup

Template Instantiation

Term Definition Example
Implicit Instantiation Compiler generates code when template used Container<int> c; triggers instantiation
Explicit Instantiation Manually requesting template instantiation template class Container<int>;
Instantiation Point Location where template is instantiated Affects name lookup
Template Definition Required Template definition must be visible Usually in header files
Extern Template Suppressing implicit instantiation extern template class Container<int>;

Template Friends

Term Definition Example
Non-template Friend Regular function as friend of template friend void display(const Container&);
Template Friend Template function as friend template<typename U> friend class Other;
Bound Friend Friend tied to specific instantiation friend void func<T>(Container<T>&);
Unbound Friend Friend independent of template parameter template<typename U> friend void func(U);

Variadic Templates

Term Definition Example
Variadic Template Template accepting variable number of arguments template<typename... Args>
Parameter Pack Sequence of template parameters Args...
Pack Expansion Expanding parameter pack Args... args
sizeof... Number of elements in pack sizeof...(Args)
Fold Expression Applying operator to all pack elements (args + ...) (C++17)
Recursive Template Processing pack elements recursively Base case + recursive case

Template Design Patterns

Term Definition Example
CRTP Curiously Recurring Template Pattern class Derived : public Base<Derived>
Policy-based Design Using template parameters for policies template<typename T, typename Allocator>
Traits Class Template providing type information std::iterator_traits<T>
Type Erasure Hiding type through abstraction std::function, std::any
Expression Templates Templates for lazy evaluation Mathematical expression optimization
Mixin Class Template base providing functionality Adding capabilities via inheritance

Type Deduction

Term Definition Example
Template Argument Deduction Compiler inferring template arguments make_pair(1, 2.0) deduces types
CTAD Class Template Argument Deduction (C++17) std::vector v{1, 2, 3}; deduces int
Deduction Guide Custom rules for CTAD template<typename T> Container(T) -> Container<T>;
Auto Return Type Deducing return type automatically auto func() { return value; }
decltype Querying type of expression decltype(expr)