| |  | Copyright |
| |  | The C++ In-Depth Series |
| | |  | Titles in the Series |
| |  | Preface |
| |  | Acknowledgments |
| | |  | Dave's Acknowledgments |
| | |  | Aleksey's Acknowledgments |
| |  | Making the Most of This Book |
| | |  | Supplementary Material |
| | |  | Trying It Out |
| |  | Chapter 1. Introduction |
| | |  | Section 1.1. Getting Started |
| | |  | Section 1.2. So What's a Metaprogram? |
| | |  | Section 1.3. Metaprogramming in the Host Language |
| | |  | Section 1.4. Metaprogramming in C++ |
| | |  | Section 1.5. Why Metaprogramming? |
| | |  | Section 1.6. When Metaprogramming? |
| | |  | Section 1.7. Why a Metaprogramming Library? |
| |  | Chapter 2. Traits and Type Manipulation |
| | |  | Section 2.1. Type Associations |
| | |  | Section 2.2. Metafunctions |
| | |  | Section 2.3. Numerical Metafunctions |
| | |  | Section 2.4. Making Choices at Compile Time |
| | |  | Section 2.5. A Brief Tour of the Boost Type Traits Library |
| | |  | Section 2.6. Nullary Metafunctions |
| | |  | Section 2.7. Metafunction Definition |
| | |  | Section 2.8. History |
| | |  | Section 2.9. Details |
| | |  | Section 2.10. Exercises |
| |  | Chapter 3. A Deeper Look at Metafunctions |
| | |  | Section 3.1. Dimensional Analysis |
| | |  | Section 3.2. Higher-Order Metafunctions |
| | |  | Section 3.3. Handling Placeholders |
| | |  | Section 3.4. More Lambda Capabilities |
| | |  | Section 3.5. Lambda Details |
| | |  | Section 3.6. Details |
| | |  | Section 3.7. Exercises |
| |  | Chapter 4. Integral Type Wrappers and Operations |
| | |  | Section 4.1. Boolean Wrappers and Operations |
| | |  | Section 4.2. Integer Wrappers and Operations |
| | |  | Section 4.3. Exercises |
| |  | Chapter 5. Sequences and Iterators |
| | |  | Section 5.1. Concepts |
| | |  | Section 5.2. Sequences and Algorithms |
| | |  | Section 5.3. Iterators |
| | |  | Section 5.4. Iterator Concepts |
| | |  | Section 5.5. Sequence Concepts |
| | |  | Section 5.6. Sequence Equality |
| | |  | Section 5.7. Intrinsic Sequence Operations |
| | |  | Section 5.8. Sequence Classes |
| | |  | Section 5.9. Integral Sequence Wrappers |
| | |  | Section 5.10. Sequence Derivation |
| | |  | Section 5.11. Writing Your Own Sequence |
| | |  | Section 5.12. Details |
| | |  | Section 5.13. Exercises |
| |  | Chapter 6. Algorithms |
| | |  | Section 6.1. Algorithms, Idioms, Reuse, and Abstraction |
| | |  | Section 6.2. Algorithms in the MPL |
| | |  | Section 6.3. Inserters |
| | |  | Section 6.4. Fundamental Sequence Algorithms |
| | |  | Section 6.5. Querying Algorithms |
| | |  | Section 6.6. Sequence Building Algorithms |
| | |  | Section 6.7. Writing Your Own Algorithms |
| | |  | Section 6.8. Details |
| | |  | Section 6.9. Exercises |
| |  | Chapter 7. Views and Iterator Adaptors |
| | |  | Section 7.1. A Few Examples |
| | |  | Section 7.2. View Concept |
| | |  | Section 7.3. Iterator Adaptors |
| | |  | Section 7.4. Writing Your Own View |
| | |  | Section 7.5. History |
| | |  | Section 7.6. Exercises |
| |  | Chapter 8. Diagnostics |
| | |  | Section 8.1. Debugging the Error Novel |
| | |  | Section 8.2. Using Tools for Diagnostic Analysis |
| | |  | Section 8.3. Intentional Diagnostic Generation |
| | |  | Section 8.4. History |
| | |  | Section 8.5. Details |
| | |  | Section 8.6. Exercises |
| |  | Chapter 9. Crossing the Compile-Time/Runtime Boundary |
| | |  | Section 9.1. for_each |
| | |  | Section 9.2. Implementation Selection |
| | |  | Section 9.3. Object Generators |
| | |  | Section 9.4. Structure Selection |
| | |  | Section 9.5. Class Composition |
| | |  | Section 9.6. (Member) Function Pointers as Template Arguments |
| | |  | Section 9.7. Type Erasure |
| | |  | Section 9.8. The Curiously Recurring Template Pattern |
| | |  | Section 9.9. Explicitly Managing the Overload Set |
| | |  | Section 9.10. The "sizeof Trick" |
| | |  | Section 9.11. Summary |
| | |  | Section 9.12. Exercises |
| |  | Chapter 10. Domain-Specific Embedded Languages |
| | |  | Section 10.1. A Little Language ... |
| | |  | Section 10.2. ... Goes a Long Way |
| | |  | Section 10.3. DSLs, Inside Out |
| | |  | Section 10.4. C++ as the Host Language |
| | |  | Section 10.5. Blitz++ and Expression Templates |
| | |  | Section 10.6. General-Purpose DSELs |
| | |  | Section 10.7. The Boost Spirit Library |
| | |  | Section 10.8. Summary |
| | |  | Section 10.9. Exercises |
| |  | Chapter 11. A DSEL Design Walkthrough |
| | |  | Section 11.1. Finite State Machines |
| | |  | Section 11.2. Framework Design Goals |
| | |  | Section 11.3. Framework Interface Basics |
| | |  | Section 11.4. Choosing a DSL |
| | |  | Section 11.5. Implementation |
| | |  | Section 11.6. Analysis |
| | |  | Section 11.7. Language Directions |
| | |  | Section 11.8. Exercises |
| |  | Appendix A. An Introduction to Preprocessor Metaprogramming |
| | |  | Section A.1. Motivation |
| | |  | Section A.2. Fundamental Abstractions of the Preprocessor |
| | |  | Section A.3. Preprocessor Library Structure |
| | |  | Section A.4. Preprocessor Library Abstractions |
| | |  | Section A.5. Exercise |
| |  | Appendix B. The typename and template Keywords |
| | |  | Section B.1. The Issue |
| | |  | Section B.2. The Rules |
| |  | Appendix C. Compile-Time Performance |
| | |  | Section C.1. The Computational Model |
| | |  | Section C.2. Managing Compilation Time |
| | |  | Section C.3. The Tests |
| |  | Appendix D. MPL Portability Summary |
| |  | CD-ROM Warranty |
| |  | Bibliography |