includefile(classtemplates/intro)

    lsubsect(ARGDEDUCTION)(Template Argument Deduction)
    includefile(classtemplates/argdeduction)

        subsubsect(Simple Definitions)
        includefile(classtemplates/simple)

        subsubsect(Explicit Conversions)
        includefile(classtemplates/explicit)

lsect(TEMPCLASSDEF)(Defining class templates)
includefile(classtemplates/definitions)

    subsect(Constructing the circular queue: CirQue)
    includefile(classtemplates/cirque)

    subsect(Non-type parameters)
    includefile(classtemplates/nontype)

    lsubsect(MEMTEMP)(Member templates)
    includefile(classtemplates/membertemplates)

    subsect(CirQue's constructors and member functions)
    includefile(classtemplates/cirquemembers)

    subsect(Using CirQue objects)
    includefile(classtemplates/cirqueuse)

    subsect(Default class template parameters)
    includefile(classtemplates/default)

    lsubsect(DECLCLASSTEMP)(Declaring class templates)
    includefile(classtemplates/declaring)

    subsect(Preventing template instantiations)
    includefile(classtemplates/externtemplate)

    subsect(Generic lambda expressions)
    includefile(classtemplates/lambda)

COMMENT(
        subsubsect(Standard template syntax)
        TODO
COMMENT(FBB N4713, 8.4.5, p. 87)
    END)

sect(Static data members)
includefile(classtemplates/static)

lsubsect(DISTINGUISH)(Extended use of the keyword `typename')
includefile(classtemplates/typename)

sect(Specializing class templates for deviating types)
includefile(classtemplates/specialization)

    subsect(Example of a class specialization)
    includefile(classtemplates/cirqueexample)

lsect(PARTIAL)(Partial specializations)
includefile(classtemplates/partial)

    subsect(Intermezzo: some simple matrix algebraic concepts)
    includefile(classtemplates/matrixalgebra)

    subsect(The Matrix class template)
    includefile(classtemplates/matrix)

    subsect(The MatrixRow partial specialization)
    includefile(classtemplates/matrixrow)

    subsect(The MatrixColumn partial specialization)
    includefile(classtemplates/matrixcol)

    subsect(The 1x1 matrix: avoid ambiguity)
    includefile(classtemplates/onebyone)

lsect(VARIADIC)(Variadic templates)
includefile(classtemplates/variadic)

    lsubsect(DEFVARTEMP)(Defining and using variadic templates)
    includefile(classtemplates/defining)

    lsubsect(PERFECT)(Perfect forwarding)
    includefile(classtemplates/perfect)

    lsubsect(UNPACK)(The unpack operator)
    includefile(classtemplates/unpack)

    subsect(Non-type variadic templates)
    includefile(classtemplates/variadicnontype)

    lsubsect(FOLDEXP)(Folding expressions)
    includefile(classtemplates/fold)
COMMENT(FBB: inspect N4713, 8.4.6, p. 95)

lsect(TUPLES)(Tuples)
includefile(classtemplates/tuples)

    subsect(Tuples and structured bindings)
    includefile(classtemplates/bindings)

sect(Computing the return type of function objects)
includefile(classtemplates/returntype)

sect(Instantiating class templates)
includefile(classtemplates/instantiations)

sect(Processing class templates and instantiations)
includefile(classtemplates/nameresolution)

lsect(TEMPFRIENDS)(Declaring friends)
includefile(classtemplates/friends)

    subsect(Non-templates used as friends in templates)
    includefile(classtemplates/normalfriends)

    subsect(Templates instantiated for specific types as friends)
    includefile(classtemplates/boundfriends)

        lsubsubsect(FREEBOUND)(Free operators as friends of nested classes)
        includefile(classtemplates/freeoperators)
        
    subsect(Unbound templates as friends)
    includefile(classtemplates/unboundfriends)

    subsect(Extended friend declarations)
    includefile(classtemplates/extended)

lsect(DERIVEDTEMPCLASS)(Class template derivation)
includefile(classtemplates/derived)

    subsect(Deriving ordinary classes from class templates)
    includefile(classtemplates/template2concrete)

    subsect(Deriving class templates from class templates)
    includefile(classtemplates/template2template)

    lsubsect(TFROMC)(Deriving class templates from ordinary classes)
    includefile(classtemplates/concrete2template)

lsect(STATICPOLY)(Static Polymorphism)
includefile(classtemplates/staticpoly)

    subsect(An example of static polymorphism)
    includefile(classtemplates/examplestaticpoly)

    subsect(Converting dynamic polymorphic classes to static
            polymorphic classes)
    includefile(classtemplates/converting)

    subsect(Using static polymorphism to avoid reimplementations)
    includefile(classtemplates/using)
    
sect(Class templates and nesting)
includefile(classtemplates/nesting)

lsect(ITERATORCONS)(Constructing iterators)
includefile(classtemplates/iteratorcons)

    lsubsect(RANDOMIT)(Implementing a `RandomAccessIterator')
    includefile(classtemplates/randomiterator)

    lsubsect(REVERSEIT)(Implementing a `reverse_iterator')
    includefile(classtemplates/reverseiterator)
