Foreword by Shawn Edwards xiii Foreword by Andrei Alexandrescu xv Acknowledgments xix About the Authors xxv Chapter 0: Introduction 1 What Makes This Book Different 1 Scope for the First Edition 2 The EMC++S Guiding Principles 3 What Do We Mean by Safely? 4 A Safe Feature 5 A Conditionally Safe Feature 5 An Unsafe Feature 6 Modern C++ Feature Catalog 6 How to Use This Book 8 Chapter 1: Safe Features 11 1.1 C++11 11 Attribute Syntax Generalized Attribute Support 12 Consecutive >s Consecutive Right-Angle Brackets 21 decltype Operator for Extracting Expression Types 25 Defaulted Functions Using = default for Special Member Functions 33 Delegating Ctors Constructors Calling Other Constructors 46 Deleted Functions Using = delete for Arbitrary Functions 53 explicit Operators Explicit Conversion Operators 61 Function static ''11 Thread-Safe Function-Scope static Variables 68 Local Types ''11 Local/Unnamed Types as Template Arguments 83 long long The long long (â¥64 bits) Integral Type 89 noreturn The [[noreturn]] Attribute 95 nullptr The Null-Pointer-Literal Keyword 99 override The override Member-Function Specifier 104 Raw String Literals Syntax for Unprocessed String Contents 108 static_assert Compile-Time Assertions 115 Trailing Return Trailing Function Return Types 124 Unicode Literals Unicode String Literals 129 using Aliases Type/Template Aliases (Extended typedef) 133 1.2 C++14 138 Aggregate Init ''14 Aggregates Having Default Member Initializers 138 Binary Literals Binary Literals: The 0b Prefix 142 deprecated The [[deprecated]] Attribute 147 Digit Separators The Digit Separator ('') 152 Variable Templates Templated Variable Declarations/Definitions 157 Chapter 2: Conditionally Safe Features 167 2.1 C++11 167 alignas The alignas Specifier 168 alignof The alignof Operator 184 auto Variables Variables of Automatically Deduced Type 195 Braced Init Braced-Initialization Syntax: {} 215 constexpr Functions Compile-Time Invocable Functions 257 constexpr Variables Compile-Time Accessible Variables 302 Default Member Init Default class/union Member Initializers 318 enum class Strongly Typed, Scoped Enumerations 332 extern template Explicit-Instantiation Declarations 353 Forwarding References Forwarding References (T&&) 377 Generalized PODs ''11 Trivial and Standard-Layout Types 401 Inheriting Ctors Inheriting Base-Class Constructors 535 initializer_list List Initialization: std::initializer_list 553 Lambdas Anonymous Function Objects (Closures) 573 noexcept Operator Asking if an Expression Cannot throw 615 Opaque enums Opaque Enumeration Declarations 660 Range for Range-Based for Loops 679 Rvalue References Move Semantics and Rvalue References (&&) 710 Underlying Type ''11 Explicit Enumeration Underlying Type 829 User-Defined Literals User-Defined Literal Operators 835 Variadic Templates Variable-Argument-Count Templates 873 2.2 C++14 958 constexpr Functions ''14 Relaxed Restrictions on constexpr Functions 959 Generic Lambdas Lambdas Having a Templated Call Operator 968 Lambda Captures Lambda-Capture Expressions 986 Chapter 3: Unsafe Features 997 3.1 C++11 997 carries_dependency The [[carries_dependency]] Attribute 998 final Prohibiting Overriding and Derivation 1007 friend ''11 Extended friend Declarations 1031 inline namespace Transparently Nested Namespaces 1055 noexcept Specifier The noexcept Function Specification 1085 Ref-Qualifiers Reference-Qualified Member Functions 1153 union ''11 Unions Having Non-Trivial Members 1174 3.2 C++14 1182 auto Return Function (auto) Return-Type Deduction 1182 decltype(auto) Deducing Types Using decltype Semantics 1205 Afterword: Looking Back and Looking Forward 1215 Glossary 1217 Bibliography 1281 Index 1305.
Embracing Modern C++ Safely