
includefile(advancedtemplates/intro)

lsect(SUBTLE)(Subtleties)
    includefile(advancedtemplates/subtle)

COMMENT( SF: at c++20: compiles OK
    lsubsect(RETURN NESTED)(Returning types nested under class templates)
    includefile(advancedtemplates/returnnested)
END)

    lsubsect(TYPERES)(Type resolution for base class members)
    includefile(advancedtemplates/basenameresolution)

    lsubsect(DOTTEMP)(::template, .template and ->template)
    includefile(advancedtemplates/dottemplate)

sect(Template Meta Programming)

    subsect(Values according to templates)
    includefile(advancedtemplates/values)

        lsubsubsect(INTTYPE)(Converting integral types to types)
        includefile(advancedtemplates/int2type)

    lsubsect(ALTERNATIVES)(Selecting alternatives using templates)
    includefile(advancedtemplates/alternatives)

        subsubsect(Defining overloading members)
        includefile(advancedtemplates/overloaded)

        lsubsubsect(IFELSE)
            (Class structure as a function of template parameters)
        includefile(advancedtemplates/classstructure)

        subsubsect(An illustrative example)
        includefile(advancedtemplates/example)
        
    subsect(Templates: Iterations by Recursion)
    includefile(advancedtemplates/iterating)

lsect(UDL)(User-defined literals)
includefile(advancedtemplates/userdefined)

lsect(TEMPTEMPPAR)(Template template parameters)
includefile(advancedtemplates/templateparam)

    subsect(Policy classes - I)
    includefile(advancedtemplates/policies)

    subsect(Policy classes - II: template template parameters)
    includefile(advancedtemplates/templateparam2)

        subsubsect(The destructor of Policy classes)
        includefile(advancedtemplates/destructor)

    subsect(Structure by Policy)
    includefile(advancedtemplates/structure)

lsect(ALIASES)(Alias Templates)
includefile(advancedtemplates/aliases)

lsect(TRAIT)(Trait classes)
includefile(advancedtemplates/trait)

    lsubsect(CLASSORNOT)(Distinguishing class from non-class types)
    includefile(advancedtemplates/distinguish.yo)

    lsubsect(TYPETRAITS)(Available type traits)
    includefile(advancedtemplates/availabletraits)

lsect(ERRCODEENUM)(Defining `ErrorCodeEnum' and 'ErrorConditionEnum'
                          enumerations) 
    includefile(advancedtemplates/errorcodeenum)

    lsubsect(ERRCAT)(Deriving classes from std::error_category) 
    includefile(advancedtemplates/errorcategory)

lsect(NOEXCEPT)(Using `noexcept' when offering the `strong guarantee')
includefile(advancedtemplates/noexcept)

sect(More conversions to class types)

    subsect(Types to types)
    includefile(advancedtemplates/typetype)

    lsubsect(NULLTYPE)(An empty type)
    includefile(advancedtemplates/nulltype)

    lsubsect(TYPECONV)(Type convertibility)
    includefile(advancedtemplates/conversion)

        subsubsect(Determining inheritance)
        includefile(advancedtemplates/inheritance)

lsect(TEMPLIST)(Template TypeList processing)
    includefile(advancedtemplates/listintro)

    subsect(The length of a TypeList)
    includefile(advancedtemplates/length)

    lsubsect(SEARCHTYPE)(Searching a TypeList)
    includefile(advancedtemplates/search)

    lsubsect(ATINDEX)(Selecting from a TypeList)
    includefile(advancedtemplates/select)

    subsect(Prefixing/Appending to a TypeList)
    includefile(advancedtemplates/append)

    subsect(Erasing from a TypeList)
    includefile(advancedtemplates/erase)

        subsubsect(Erasing the first occurrence)
        includefile(advancedtemplates/erasefirst)

        subsubsect(Erasing a type by its index)
        includefile(advancedtemplates/eraseindex)

        subsubsect(Erasing all occurrences of a type)
        includefile(advancedtemplates/eraseall)

        subsubsect(Erasing duplicates)
        includefile(advancedtemplates/erasedup)

sect(Using a TypeList)
includefile(advancedtemplates/using)

    subsect(The Wrap and Multi class templates)
    includefile(advancedtemplates/multi)

    subsect(The MultiBase class template)
    includefile(advancedtemplates/multibase)

    lsubsect(GENSUPPORT)(Support templates)
    includefile(advancedtemplates/support)

    subsect(Using Multi)
    includefile(advancedtemplates/usingmulti)

sect(Expression Templates)
includefile(advancedtemplates/expressiontemplates)

    subsect(Designing an Expression Template)
    includefile(advancedtemplates/designing)

    subsect(Implementing an Expression Template)
    includefile(advancedtemplates/implementing)

    subsect(The BasicType trait class and ordering classes)
    includefile(advancedtemplates/basictype)

lsect(CONCEPTS)(Concepts)
includefile(advancedtemplates/concepts/intro)

    lsubsect(CONDEF)(Defining concepts)
    includefile(advancedtemplates/concepts/defining)
    
    subsect(Requirements)
    includefile(advancedtemplates/concepts/requirements)
    
        lsubsubsect(REQSIMPLE)(Simple requirements)
        includefile(advancedtemplates/concepts/simple)
    
        subsubsect(Type requirements)
        includefile(advancedtemplates/concepts/type)
    
        lsubsubsect(REQCOMP)(Compound requirements)
        includefile(advancedtemplates/concepts/compound)
    
        lsubsubsect(REQNEST)(Nested requirements)
        includefile(advancedtemplates/concepts/nested)
    
    lsubsect(CXXCONCEPTS)(Predefined concepts)
    includefile(advancedtemplates/concepts/predefined)
    
        subsubsect(Concepts specifying one template type parameter)
        includefile(advancedtemplates/concepts/oneparam)
    
        subsubsect(Concepts specifying two template type parameters)
        includefile(advancedtemplates/concepts/twoparams)
    
        lsubsubsect(CXXMULTI)
                   (Concepts specifying multiple template type parameters) 
        includefile(advancedtemplates/concepts/multipleparams)
    
    lsubsect(CONPACK)(Applying concepts to template parameter packs)
    includefile(advancedtemplates/concepts/parampack)
    
    subsect(Applying concepts to free functions)
    includefile(advancedtemplates/concepts/freefunctions)
    
    subsect(Implementing constrained class members)
    includefile(advancedtemplates/concepts/constrained)
    
    subsect(Constrained partial specializations)
    includefile(advancedtemplates/concepts/specializations)
    
        subsubsect(Function- and class template declarations)
        includefile(advancedtemplates/concepts/declarations)
    
        lsubsubsect(BOUNDCONCEPT)(Bound free-operators)
        includefile(advancedtemplates/concepts/boundfriends)
    
