Distinguish between declarations (used as interfaces) and definitions (used as implementations); §3.1.
 Use header files to represent interfaces and to emphasize logical structure; §3.2; [CG: SF.3].
 #include a header in the source file that implements its functions; §3.2; [CG: SF.5].
 Avoid non-inline function definitions in headers; §3.2; [CG: SF.2].
 Prefer modules over headers (where modules are supported); §3.3.
 Use namespaces to express logical structure; §3.4; [CG: SF.20].
 Use using-directives for transition, for foundational libraries (such as std), or within a local scope; §3.4; [CG: SF.6] [CG: SF.7].
 Don’t put a using-directive in a header file; §3.4; [CG: SF.7].
 Throw an exception to indicate that you cannot perform an assigned task; §3.5; [CG: E.2].
 Use exceptions for error handling only; §3.5.3; [CG: E.3].
 Use error codes when an immediate caller is expected to handle the error; §3.5.3.
 Throw an exception if the error is expected to perculate up through many function calls; §3.5.3.
 If in doubt whether to use an exception or an error code, prefer exceptions; §3.5.3.
 Develop an error-handling strategy early in a design; §3.5; [CG: E.12].
 Use purpose-designed user-defined types as exceptions (not built-in types); §3.5.1.
 Don’t try to catch every exception in every function; §3.5; [CG: E.7].
 Prefer RAII to explicit try-blocks; §3.5.1, §3.5.2; [CG: E.6].
 If your function may not throw, declare it noexcept; §3.5; [CG: E.12].
 Let a constructor establish an invariant, and throw if it cannot; §3.5.2; [CG: E.5].
 Design your error-handling strategy around invariants; §3.5.2; [CG: E.4].
 What can be checked at compile time is usually best checked at compile time; §3.5.5 [CG: P.4] [CG: P.5].
 Pass “small” values by value and “large“ values by references; §3.6.1; [CG: F.16].
 Prefer pass-by-const-reference over plain pass-by-reference; _module.arguments_; [CG: F.17].
 Return values as function-return values (rather than by out-parameters); §3.6.2; [CG: F.20] [CG: F.21].
 Don’t overuse return-type deduction; §3.6.2.
 Don’t overuse structured binding; using a named return type is often clearer documentation; §3.6.3.