Log In
Or create an account -> 
Imperial Library
  • Home
  • About
  • News
  • Upload
  • Forum
  • Help
  • Login/SignUp

Index
Title Page Copyright Page Dedication Contents Preface Acknowledgments for the Second Edition Acknowledgments for the First Edition About This Book
What You Should Know Before Reading This Book Overall Structure of the Book How to Read This Book Some Remarks About Programming Style The C++11, C++14, and C++17 Standards Example Code and Additional Information Feedback
Part I: The Basics
1 Function Templates
1.1 A First Look at Function Templates
1.1.1 Defining the Template 1.1.2 Using the Template 1.1.3 Two-Phase Translation
1.2 Template Argument Deduction 1.3 Multiple Template Parameters
1.3.1 Template Parameters for Return Types 1.3.2 Deducing the Return Type 1.3.3 Return Type as Common Type
1.4 Default Template Arguments 1.5 Overloading Function Templates 1.6 But, Shouldn’t We …?
1.6.1 Pass by Value or by Reference? 1.6.2 Why Not inline? 1.6.3 Why Not constexpr?
1.7 Summary
2 Class Templates
2.1 Implementation of Class Template Stack
2.1.1 Declaration of Class Templates 2.1.2 Implementation of Member Functions
2.2 Use of Class Template Stack 2.3 Partial Usage of Class Templates
2.3.1 Concepts
2.4 Friends 2.5 Specializations of Class Templates 2.6 Partial Specialization 2.7 Default Class Template Arguments 2.8 Type Aliases 2.9 Class Template Argument Deduction 2.10 Templatized Aggregates 2.11 Summary
3 Nontype Template Parameters
3.1 Nontype Class Template Parameters 3.2 Nontype Function Template Parameters 3.3 Restrictions for Nontype Template Parameters 3.4 Template Parameter Type auto 3.5 Summary
4 Variadic Templates
4.1 Variadic Templates
4.1.1 Variadic Templates by Example 4.1.2 Overloading Variadic and Nonvariadic Templates 4.1.3 Operator sizeof…
4.2 Fold Expressions 4.3 Application of Variadic Templates 4.4 Variadic Class Templates and Variadic Expressions
4.4.1 Variadic Expressions 4.4.2 Variadic Indices 4.4.3 Variadic Class Templates 4.4.4 Variadic Deduction Guides 4.4.5 Variadic Base Classes and using
4.5 Summary
5 Tricky Basics
5.1 Keyword typename 5.2 Zero Initialization 5.3 Using this-> 5.4 Templates for Raw Arrays and String Literals 5.5 Member Templates
5.5.1 The .template Construct 5.5.2 Generic Lambdas and Member Templates
5.6 Variable Templates 5.7 Template Template Parameters 5.8 Summary
6 Move Semantics and enable_if<>
6.1 Perfect Forwarding 6.2 Special Member Function Templates 6.3 Disable Templates with enable_if<> 6.4 Using enable_if<> 6.5 Using Concepts to Simplify enable_if<> Expressions 6.6 Summary
7 By Value or by Reference?
7.1 Passing by Value 7.2 Passing by Reference
7.2.1 Passing by Constant Reference 7.2.2 Passing by Nonconstant Reference 7.2.3 Passing by Forwarding Reference
7.3 Using std::ref() and std::cref() 7.4 Dealing with String Literals and Raw Arrays
7.4.1 Special Implementations for String Literals and Raw Arrays
7.5 Dealing with Return Values 7.6 Recommended Template Parameter Declarations 7.7 Summary
8 Compile-Time Programming
8.1 Template Metaprogramming 8.2 Computing with constexpr 8.3 Execution Path Selection with Partial Specialization 8.4 SFINAE (Substitution Failure Is Not An Error)
8.4.1 Expression SFINAE with decltype
8.5 Compile-Time if 8.6 Summary
9 Using Templates in Practice
9.1 The Inclusion Model
9.1.1 Linker Errors 9.1.2 Templates in Header Files
9.2 Templates and inline 9.3 Precompiled Headers 9.4 Decoding the Error Novel 9.5 Afternotes 9.6 Summary
10 Basic Template Terminology
10.1 “Class Template” or “Template Class”? 10.2 Substitution, Instantiation, and Specialization 10.3 Declarations versus Definitions
10.3.1 Complete versus Incomplete Types
10.4 The One-Definition Rule 10.5 Template Arguments versus Template Parameters 10.6 Summary
11 Generic Libraries
11.1 Callables
11.1.1 Supporting Function Objects 11.1.2 Dealing with Member Functions and Additional Arguments 11.1.3 Wrapping Function Calls
11.2 Other Utilities to Implement Generic Libraries
11.2.1 Type Traits 11.2.2 std::addressof() 11.2.3 std::declval()
11.3 Perfect Forwarding Temporaries 11.4 References as Template Parameters 11.5 Defer Evaluations 11.6 Things to Consider When Writing Generic Libraries 11.7 Summary
Part II: Templates in Depth
12 Fundamentals in Depth
12.1 Parameterized Declarations
12.1.1 Virtual Member Functions 12.1.2 Linkage of Templates 12.1.3 Primary Templates
12.2 Template Parameters
12.2.1 Type Parameters 12.2.2 Nontype Parameters 12.2.3 Template Template Parameters 12.2.4 Template Parameter Packs 12.2.5 Default Template Arguments
12.3 Template Arguments
12.3.1 Function Template Arguments 12.3.2 Type Arguments 12.3.3 Nontype Arguments 12.3.4 Template Template Arguments 12.3.5 Equivalence
12.4 Variadic Templates
12.4.1 Pack Expansions 12.4.2 Where Can Pack Expansions Occur? 12.4.3 Function Parameter Packs 12.4.4 Multiple and Nested Pack Expansions 12.4.5 Zero-Length Pack Expansions 12.4.6 Fold Expressions
12.5 Friends
12.5.1 Friend Classes of Class Templates 12.5.2 Friend Functions of Class Templates 12.5.3 Friend Templates
12.6 Afternotes
13 Names in Templates
13.1 Name Taxonomy 13.2 Looking Up Names
13.2.1 Argument-Dependent Lookup 13.2.2 Argument-Dependent Lookup of Friend Declarations 13.2.3 Injected Class Names 13.2.4 Current Instantiations
13.3 Parsing Templates
13.3.1 Context Sensitivity in Nontemplates 13.3.2 Dependent Names of Types 13.3.3 Dependent Names of Templates 13.3.4 Dependent Names in Using Declarations 13.3.5 ADL and Explicit Template Arguments 13.3.6 Dependent Expressions 13.3.7 Compiler Errors
13.4 Inheritance and Class Templates
13.4.1 Nondependent Base Classes 13.4.2 Dependent Base Classes
13.5 Afternotes
14 Instantiation
14.1 On-Demand Instantiation 14.2 Lazy Instantiation
14.2.1 Partial and Full Instantiation 14.2.2 Instantiated Components
14.3 The C++ Instantiation Model
14.3.1 Two-Phase Lookup 14.3.2 Points of Instantiation 14.3.3 The Inclusion Model
14.4 Implementation Schemes
14.4.1 Greedy Instantiation 14.4.2 Queried Instantiation 14.4.3 Iterated Instantiation
14.5 Explicit Instantiation
14.5.1 Manual Instantiation 14.5.2 Explicit Instantiation Declarations
14.6 Compile-Time if Statements 14.7 In the Standard Library 14.8 Afternotes
15 Template Argument Deduction
15.1 The Deduction Process 15.2 Deduced Contexts 15.3 Special Deduction Situations 15.4 Initializer Lists 15.5 Parameter Packs
15.5.1 Literal Operator Templates
15.6 Rvalue References
15.6.1 Reference Collapsing Rules 15.6.2 Forwarding References 15.6.3 Perfect Forwarding 15.6.4 Deduction Surprises
15.7 SFINAE (Substitution Failure Is Not An Error)
15.7.1 Immediate Context
15.8 Limitations of Deduction
15.8.1 Allowable Argument Conversions 15.8.2 Class Template Arguments 15.8.3 Default Call Arguments 15.8.4 Exception Specifications
15.9 Explicit Function Template Arguments 15.10 Deduction from Initializers and Expressions
15.10.1 The auto Type Specifier 15.10.2 Expressing the Type of an Expression with decltype 15.10.3 decltype(auto) 15.10.4 Special Situations for auto Deduction 15.10.5 Structured Bindings 15.10.6 Generic Lambdas
15.11 Alias Templates 15.12 Class Template Argument Deduction
15.12.1 Deduction Guides 15.12.2 Implicit Deduction Guides 15.12.3 Other Subtleties
15.13 Afternotes
16 Specialization and Overloading
16.1 When “Generic Code” Doesn’t Quite Cut It
16.1.1 Transparent Customization 16.1.2 Semantic Transparency
16.2 Overloading Function Templates
16.2.1 Signatures 16.2.2 Partial Ordering of Overloaded Function Templates 16.2.3 Formal Ordering Rules 16.2.4 Templates and Nontemplates 16.2.5 Variadic Function Templates
16.3 Explicit Specialization
16.3.1 Full Class Template Specialization 16.3.2 Full Function Template Specialization 16.3.3 Full Variable Template Specialization 16.3.4 Full Member Specialization
16.4 Partial Class Template Specialization 16.5 Partial Variable Template Specialization 16.6 Afternotes
17 Future Directions
17.1 Relaxed typename Rules 17.2 Generalized Nontype Template Parameters 17.3 Partial Specialization of Function Templates 17.4 Named Template Arguments 17.5 Overloaded Class Templates 17.6 Deduction for Nonfinal Pack Expansions 17.7 Regularization of void 17.8 Type Checking for Templates 17.9 Reflective Metaprogramming 17.10 Pack Facilities 17.11 Modules
Part III: Templates and Design
18 The Polymorphic Power of Templates
18.1 Dynamic Polymorphism 18.2 Static Polymorphism 18.3 Dynamic versus Static Polymorphism 18.4 Using Concepts 18.5 New Forms of Design Patterns 18.6 Generic Programming 18.7 Afternotes
19 Implementing Traits
19.1 An Example: Accumulating a Sequence
19.1.1 Fixed Traits 19.1.2 Value Traits 19.1.3 Parameterized Traits
19.2 Traits versus Policies and Policy Classes
19.2.1 Traits and Policies: What’s the Difference? 19.2.2 Member Templates versus Template Template Parameters 19.2.3 Combining Multiple Policies and/or Traits 19.2.4 Accumulation with General Iterators
19.3 Type Functions
19.3.1 Element Types 19.3.2 Transformation Traits 19.3.3 Predicate Traits 19.3.4 Result Type Traits
19.4 SFINAE-Based Traits
19.4.1 SFINAE Out Function Overloads 19.4.2 SFINAE Out Partial Specializations 19.4.3 Using Generic Lambdas for SFINAE 19.4.4 SFINAE-Friendly Traits
19.5 IsConvertibleT 19.6 Detecting Members
19.6.1 Detecting Member Types 19.6.2 Detecting Arbitrary Member Types 19.6.3 Detecting Nontype Members 19.6.4 Using Generic Lambdas to Detect Members
19.7 Other Traits Techniques
19.7.1 If-Then-Else 19.7.2 Detecting Nonthrowing Operations 19.7.3 Traits Convenience
19.8 Type Classification
19.8.1 Determining Fundamental Types 19.8.2 Determining Compound Types 19.8.3 Identifying Function Types 19.8.4 Determining Class Types 19.8.5 Determining Enumeration Types
19.9 Policy Traits
19.9.1 Read-Only Parameter Types
19.10 In the Standard Library 19.11 Afternotes
20 Overloading on Type Properties
20.1 Algorithm Specialization 20.2 Tag Dispatching 20.3 Enabling/Disabling Function Templates
20.3.1 Providing Multiple Specializations 20.3.2 Where Does the EnableIf Go? 20.3.3 Compile-Time if 20.3.4 Concepts
20.4 Class Specialization
20.4.1 Enabling/Disabling Class Templates 20.4.2 Tag Dispatching for Class Templates
20.5 Instantiation-Safe Templates 20.6 In the Standard Library 20.7 Afternotes
21 Templates and Inheritance
21.1 The Empty Base Class Optimization (EBCO)
21.1.1 Layout Principles 21.1.2 Members as Base Classes
21.2 The Curiously Recurring Template Pattern (CRTP)
21.2.1 The Barton-Nackman Trick 21.2.2 Operator Implementations 21.2.3 Facades
21.3 Mixins
21.3.1 Curious Mixins 21.3.2 Parameterized Virtuality
21.4 Named Template Arguments 21.5 Afternotes
22 Bridging Static and Dynamic Polymorphism
22.1 Function Objects, Pointers, and std::function<> 22.2 Generalized Function Pointers 22.3 Bridge Interface 22.4 Type Erasure 22.5 Optional Bridging 22.6 Performance Considerations 22.7 Afternotes
23 Metaprogramming
23.1 The State of Modern C++ Metaprogramming
23.1.1 Value Metaprogramming 23.1.2 Type Metaprogramming 23.1.3 Hybrid Metaprogramming 23.1.4 Hybrid Metaprogramming for Unit Types
23.2 The Dimensions of Reflective Metaprogramming 23.3 The Cost of Recursive Instantiation
23.3.1 Tracking All Instantiations
23.4 Computational Completeness 23.5 Recursive Instantiation versus Recursive Template Arguments 23.6 Enumeration Values versus Static Constants 23.7 Afternotes
24 Typelists
24.1 Anatomy of a Typelist 24.2 Typelist Algorithms
24.2.1 Indexing 24.2.2 Finding the Best Match 24.2.3 Appending to a Typelist 24.2.4 Reversing a Typelist 24.2.5 Transforming a Typelist 24.2.6 Accumulating Typelists 24.2.7 Insertion Sort
24.3 Nontype Typelists
24.3.1 Deducible Nontype Parameters
24.4 Optimizing Algorithms with Pack Expansions 24.5 Cons-style Typelists 24.6 Afternotes
25 Tuples
25.1 Basic Tuple Design
25.1.1 Storage 25.1.2 Construction
25.2 Basic Tuple Operations
25.2.1 Comparison 25.2.2 Output
25.3 Tuple Algorithms
25.3.1 Tuples as Typelists 25.3.2 Adding to and Removing from a Tuple 25.3.3 Reversing a Tuple 25.3.4 Index Lists 25.3.5 Reversal with Index Lists 25.3.6 Shuffle and Select
25.4 Expanding Tuples 25.5 Optimizing Tuple
25.5.1 Tuples and the EBCO 25.5.2 Constant-time get()
25.6 Tuple Subscript 25.7 Afternotes
26 Discriminated Unions
26.1 Storage 26.2 Design 26.3 Value Query and Extraction 26.4 Element Initialization, Assignment and Destruction
26.4.1 Initialization 26.4.2 Destruction 26.4.3 Assignment
26.5 Visitors
26.5.1 Visit Result Type 26.5.2 Common Result Type
26.6 Variant Initialization and Assignment 26.7 Afternotes
27 Expression Templates
27.1 Temporaries and Split Loops 27.2 Encoding Expressions in Template Arguments
27.2.1 Operands of the Expression Templates 27.2.2 The Array Type 27.2.3 The Operators 27.2.4 Review 27.2.5 Expression Templates Assignments
27.3 Performance and Limitations of Expression Templates 27.4 Afternotes
28 Debugging Templates
28.1 Shallow Instantiation 28.2 Static Assertions 28.3 Archetypes 28.4 Tracers 28.5 Oracles 28.6 Afternotes
Appendixes
A The One-Definition Rule
A.1 Translation Units A.2 Declarations and Definitions A.3 The One-Definition Rule in Detail
A.3.1 One-per-Program Constraints A.3.2 One-per-Translation Unit Constraints A.3.3 Cross-Translation Unit Equivalence Constraints
B Value Categories
B.1 Traditional Lvalues and Rvalues
B.1.1 Lvalue-to-Rvalue Conversions
B.2 Value Categories Since C++11
B.2.1 Temporary Materialization
B.3 Checking Value Categories with decltype B.4 Reference Types
C Overload Resolution
C.1 When Does Overload Resolution Kick In? C.2 Simplified Overload Resolution
C.2.1 The Implied Argument for Member Functions C.2.2 Refining the Perfect Match
C.3 Overloading Details
C.3.1 Prefer Nontemplates or More Specialized Templates C.3.2 Conversion Sequences C.3.3 Pointer Conversions C.3.4 Initializer Lists C.3.5 Functors and Surrogate Functions C.3.6 Other Overloading Contexts
D Standard Type Utilities
D.1 Using Type Traits
D.1.1 std::integral_constant and std::bool_constant D.1.2 Things You Should Know When Using Traits
D.2 Primary and Composite Type Categories
D.2.1 Testing for the Primary Type Category D.2.2 Test for Composite Type Categories
D.3 Type Properties and Operations
D.3.1 Other Type Properties D.3.2 Test for Specific Operations
D.3.3 Relationships Between Types D.4 Type Construction D.5 Other Traits D.6 Combining Type Traits D.7 Other Utilities
E Concepts
E.1 Using Concepts E.2 Defining Concepts E.3 Overloading on Constraints
E.3.1 Constraint Subsumption E.3.2 Constraints and Tag Dispatching
E.4 Concept Tips
E.4.1 Testing Concepts E.4.2 Concept Granularity E.4.3 Binary Compatibility
Bibliography
Forums Books and Web Sites
Glossary Index
  • ← Prev
  • Back
  • Next →
  • ← Prev
  • Back
  • Next →

Chief Librarian: Las Zenow <zenow@riseup.net>
Fork the source code from gitlab
.

This is a mirror of the Tor onion service:
http://kx5thpx2olielkihfyo4jgjqfb7zx7wxr3sd4xzt26ochei4m6f7tayd.onion