| Top | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#main |
| In: Introduction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-introduction |
| P: Philosophy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-philosophy |
| I: Interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-interfaces |
| F: Functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-functions |
| C: Classes and class hierarchies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-class |
| Enum: Enumerations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-enum |
| R: Resource management | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-resource |
| ES: Expressions and statements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-expr |
| Per: Performance | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-performance |
| CP: Concurrency | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-concurrency |
| E: Error handling | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-errors |
| Con: Constants and immutability | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-const |
| T: Templates and generic programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-templates |
| CPL: C-style programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-cpl |
| SF: Source files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-source |
| SL: The Standard library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-stdlib |
| A: Architectural Ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-a |
| NR: Non-Rules and myths | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-not |
| RF: References | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-references |
| Pro: Profiles | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-profile |
| GSL: Guideline support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-gsl |
| NL: Naming and layout | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| FAQ: Frequently asked questions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-faq |
| Appendix A: Libraries | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-libraries |
| Appendix B: Modernizing code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-modernizing |
| Appendix C: Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-discussion |
| Appendix D: Tools support | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-tools |
| Glossary | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-glossary |
| To-do: Unclassified proto-rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-unclassified |
| https://github.com/isocpp/CppCoreGuidelines |
| Bjarne Stroustrup | https://www.stroustrup.com |
| Herb Sutter | https://herbsutter.com/ |
| LICENSE | https://github.com/isocpp/CppCoreGuidelines/blob/master/LICENSE |
| the introduction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-introduction |
| here | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-ack |
| To-do: Unclassified proto-rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-unclassified |
| read an explanation of the scope and structure of this Guide | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-abstract |
| In: Introduction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-introduction |
| P: Philosophy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-philosophy |
| I: Interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-interfaces |
| F: Functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-functions |
| C: Classes and class hierarchies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-class |
| Enum: Enumerations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-enum |
| R: Resource management | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-resource |
| ES: Expressions and statements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-expr |
| Per: Performance | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-performance |
| CP: Concurrency and parallelism | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-concurrency |
| E: Error handling | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-errors |
| Con: Constants and immutability | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-const |
| T: Templates and generic programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-templates |
| CPL: C-style programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-cpl |
| SF: Source files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-source |
| SL: The Standard Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-the-standard-library |
| A: Architectural ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-a |
| NR: Non-Rules and myths | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-not |
| RF: References | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-references |
| Pro: Profiles | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-profile |
| GSL: Guidelines support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-gsl |
| NL: Naming and layout suggestions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| FAQ: Answers to frequently asked questions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-faq |
| Appendix A: Libraries | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-libraries |
| Appendix B: Modernizing code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-modernizing |
| Appendix C: Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-discussion |
| Appendix D: Supporting tools | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-tools |
| Glossary | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-glossary |
| To-do: Unclassified proto-rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-unclassified |
| regular types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-regular |
| prefer initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-initialize |
| copy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-semantic |
| move | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-semantic |
| other operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-matched |
| default | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-eqdefault |
| data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-org |
| invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| members | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-member |
| helpers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-helper |
| concrete types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-concrete |
| ctors, =, and dtors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-ctor |
| hierarchy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-hier |
| operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-overload |
| rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-concepts |
| in generic programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-raise |
| template arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-concepts |
| semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-low |
| invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| establish invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-ctor |
| throw | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-throw |
| default | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default0 |
| not needed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default |
| explicit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-explicit |
| delegating | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-delegating |
| virtual | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-ctor-virtual |
| when to use | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-domain |
| as interface | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-abstract |
| destructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-dtor |
| copy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-copy |
| getters and setters | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-get |
| multiple inheritance | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-mi-interface |
| overloading | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-using |
| slicing | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| dynamic_cast | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-dynamic_cast |
| and constructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-matched |
| when needed? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor |
| must not fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-fail |
| errors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-errors |
| throw | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-throw |
| for errors only | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-errors |
| noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-noexcept |
| minimize try | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-catch |
| what if no exceptions? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-codes |
| range-for and for | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-range |
| for and while | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-while |
| for-initializer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-init |
| empty body | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-empty |
| loop variable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-loop-counter |
| loop variable type ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-??? |
| naming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-package |
| single operation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-logical |
| no throw | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-noexcept |
| arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-smart |
| argument passing | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-conventional |
| multiple return values | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out-multi |
| pointers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-return-ptr |
| lambdas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-capture-vs-overload |
| small functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-inline |
| in headers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-inline |
| always | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-always |
| prefer {} | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-list |
| lambdas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lambda-init |
| default member initializers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-in-class-initializer |
| class members | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-initialize |
| factory functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-factory |
| when to use | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lambdas |
| conventional | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-conventional |
| avoid conversion operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-conversion |
| and lambdas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-lambda |
| information hiding | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-private |
| consistency | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-public |
| protected | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-protected |
| compile-time checking | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-compile-time |
| and concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-check-class |
| for organizing data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-org |
| use if no invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| no private members | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-class |
| abstraction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-raise |
| containers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-cont |
| concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-concepts |
| and signed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-mix |
| bit manipulation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-unsigned |
| interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-abstract |
| not virtual | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-concrete |
| destructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-virtual |
| never fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-fail |
| In.target: Target readership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-readers |
| In.aims: Aims | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-aims |
| In.not: Non-aims | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-non |
| In.force: Enforcement | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-force |
| In.struct: The structure of this document | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-struct |
| In.sec: Major sections | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-sec |
| programmers who might consider C | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-cpl |
| Stroustrup05 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup05 |
| library components | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| gradual adoption | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-modernizing |
| the references | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-references |
| the modernization section | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-modernizing |
| C.134 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-public |
| type.4 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-cstylecast |
| bounds.2 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-bounds-arrayindex |
| Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-discussion |
| Issue | https://github.com/isocpp/CppCoreGuidelines/issues |
| the references | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-references |
| In: Introduction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-introduction |
| P: Philosophy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-philosophy |
| I: Interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-interfaces |
| F: Functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-functions |
| C: Classes and class hierarchies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-class |
| Enum: Enumerations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-enum |
| R: Resource management | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-resource |
| ES: Expressions and statements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-expr |
| Per: Performance | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-performance |
| CP: Concurrency and parallelism | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-concurrency |
| E: Error handling | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-errors |
| Con: Constants and immutability | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-const |
| T: Templates and generic programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-templates |
| CPL: C-style programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-cpl |
| SF: Source files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-source |
| SL: The Standard Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-the-standard-library |
| A: Architectural ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-a |
| NR: Non-Rules and myths | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-not |
| RF: References | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-references |
| Pro: Profiles | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-profile |
| GSL: Guidelines support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| NL: Naming and layout suggestions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| FAQ: Answers to frequently asked questions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-faq |
| Appendix A: Libraries | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-libraries |
| Appendix B: Modernizing code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-modernizing |
| Appendix C: Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-discussion |
| Appendix D: Supporting tools | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-tools |
| Glossary | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-glossary |
| To-do: Unclassified proto-rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-unclassified |
| P.1: Express ideas directly in code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-direct |
| P.2: Write in ISO Standard C++ | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-cplusplus |
| P.3: Express intent | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-what |
| P.4: Ideally, a program should be statically type safe | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-typesafe |
| P.5: Prefer compile-time checking to run-time checking | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-compile-time |
| P.6: What cannot be checked at compile time should be checkable at run time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-run-time |
| P.7: Catch run-time errors early | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-early |
| P.8: Don’t leak any resources | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-leak |
| P.9: Don’t waste time or space | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-waste |
| P.10: Prefer immutable data to mutable data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-mutable |
| P.11: Encapsulate messy constructs, rather than spreading through the code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-library |
| P.12: Use supporting tools as appropriate | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-tools |
| P.13: Use support libraries as appropriate | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-lib |
| guidelines support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| undefined order of evaluation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-order |
| ES.71 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-range |
| The guidelines support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| The ISO C++ Standard Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-the-standard-library |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| The resource management section | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-resource |
| the lifetime safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| the type and bounds profiles | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-force |
| the GSL | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| Con: Constants and immutability | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-const |
| subset of superset principle | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#r0 |
| Static analysis tools | https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis |
| Concurrency tools | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-tools |
| Testing tools | https://github.com/isocpp/CppCoreGuidelines/tree/master |
| ISO C++ Standard Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-the-standard-library |
| Guidelines Support Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| I.1: Make interfaces explicit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-explicit |
| I.2: Avoid non-const global variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-global |
| I.3: Avoid singletons | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-singleton |
| I.4: Make interfaces precisely and strongly typed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-typed |
| I.5: State preconditions (if any) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pre |
| I.6: Prefer Expects() for expressing preconditions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-expects |
| I.7: State postconditions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-post |
| I.8: Prefer Ensures() for expressing postconditions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-ensures |
| I.9: If an interface is a template, document its parameters using concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-concepts |
| I.10: Use exceptions to signal a failure to perform a required task | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-except |
| I.11: Never transfer ownership by a raw pointer (T*) or reference (T&) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-raw |
| I.12: Declare a pointer that must not be null as not_null | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-nullptr |
| I.13: Do not pass an array as a single pointer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-array |
| I.22: Avoid complex initialization of global objects | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-global-init |
| I.23: Keep the number of function arguments low | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-nargs |
| I.24: Avoid adjacent parameters that can be invoked by the same arguments in either order with different meaning | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-unrelated |
| I.25: Prefer empty abstract classes as interfaces to class hierarchies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-abstract |
| I.26: If you want a cross-compiler ABI, use a C-style subset | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-abi |
| I.27: For stable library ABI, consider the Pimpl idiom | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pimpl |
| I.30: Encapsulate rule violations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-encapsulate |
| F: Functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-functions |
| C.concrete: Concrete types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-concrete |
| C.hier: Class hierarchies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-hier |
| C.over: Overloading and overloaded operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-overload |
| C.con: Containers and other resource handles | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-containers |
| E: Error handling | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-errors |
| T: Templates and generic programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-templates |
| rules for calling functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-call |
| GSL | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| contract proposal | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0380r1.pdf |
| ensuring that a value is non-negative | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-nonnegative |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| contract proposal | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0380r1.pdf |
| Generic programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-gp |
| concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-concepts |
| critical | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-critical |
| measure | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-measure |
| I.5 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pre |
| I.7 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-post |
| Pass ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-smartptrparam |
| guidelines support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| Argument passing | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-conventional |
| use of smart pointer arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-smartptrparam |
| value return | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-value-return |
| guidelines support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| GSL | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| GOTW #100 | https://herbsutter.com/gotw/_100/ |
| cppreference | https://en.cppreference.com/w/cpp/language/pimpl |
| against uninitialized variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-always |
| ignoring ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-raw |
| against magic constants | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-magic |
| [Str15] | https://www.stroustrup.com/resource-model.pdf |
| F.1: “Package” meaningful operations as carefully named functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-package |
| F.2: A function should perform a single logical operation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-logical |
| F.3: Keep functions short and simple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-single |
| F.4: If a function might have to be evaluated at compile time, declare it constexpr | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-constexpr |
| F.5: If a function is very small and time-critical, declare it inline | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-inline |
| F.6: If your function must not throw, declare it noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-noexcept |
| F.7: For general use, take T* or T& arguments rather than smart pointers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-smart |
| F.8: Prefer pure functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-pure |
| F.9: Unused parameters should be unnamed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-unused |
| F.10: If an operation can be reused, give it a name | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-name |
| F.11: Use an unnamed lambda if you need a simple function object in one place only | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-lambda |
| F.15: Prefer simple and conventional ways of passing information | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-conventional |
| F.16: For “in” parameters, pass cheaply-copied types by value and others by reference to const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-in |
| F.17: For “in-out” parameters, pass by reference to non-const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-inout |
| F.18: For “will-move-from” parameters, pass by X&& and std::move the parameter | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-consume |
| F.19: For “forward” parameters, pass by TP&& and only std::forward the parameter | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-forward |
| F.20: For “out” output values, prefer return values to output parameters | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out |
| F.21: To return multiple “out” values, prefer returning a struct | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out-multi |
| F.60: Prefer T* over T& when “no argument” is a valid option | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-ptr-ref |
| F.22: Use T* or owner to designate a single object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-ptr |
| F.23: Use a not_null to indicate that “null” is not a valid value | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-nullptr |
| F.24: Use a span or a span_p to designate a half-open sequence | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-range |
| F.25: Use a zstring or a not_null to designate a C-style string | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-zstring |
| F.26: Use a unique_ptr to transfer ownership where a pointer is needed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-unique_ptr |
| F.27: Use a shared_ptr to share ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-shared_ptr |
| F.42: Return a T* to indicate a position (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-return-ptr |
| F.43: Never (directly or indirectly) return a pointer or a reference to a local object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-dangle |
| F.44: Return a T& when copy is undesirable and “returning no object” isn’t needed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-return-ref |
| F.45: Don’t return a T&& | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-return-ref-ref |
| F.46: int is the return type for main() | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-main |
| F.47: Return T& from assignment operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-assignment-op |
| F.48: Don’t return std::move(local) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-return-move-local |
| F.49: Don’t return const T | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-return-const |
| F.50: Use a lambda when a function won’t do (to capture local variables, or to write a local function) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-capture-vs-overload |
| F.51: Where there is a choice, prefer default arguments over overloading | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-default-args |
| F.52: Prefer capturing by reference in lambdas that will be used locally, including passed to algorithms | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-reference-capture |
| F.53: Avoid capturing by reference in lambdas that will be used non-locally, including returned, stored on the heap, or passed to another thread | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-value-capture |
| F.54: When writing a lambda that captures this or any class data member, don’t use [=] default capture | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-this-capture |
| F.55: Don’t use va_arg arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#f-varargs |
| F.56: Avoid unnecessary condition nesting | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#f-nesting |
| C.lambdas: Function objects and lambdas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lambdas |
| Keep functions short and simple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-single |
| Keep functions short and simple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-single |
| C.44 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default00 |
| lifetime safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| Prefer T* over T& when “no argument” is a valid option | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-ptr-ref |
| Smart pointer rule summary | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-summary-smartptrs |
| initializers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| String | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-string |
| R.34 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-owner |
| R.35 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam |
| R.36 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-const |
| F.18 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-consume |
| F.18 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-consume |
| F.19 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-forward |
| F.18 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-consume |
| F.19 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-forward |
| R.34 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-owner |
| R.36 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-const |
| cheap to copy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-in |
| That could be dangerous | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-semantic |
| R.34 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-owner |
| use a tuple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out-multi |
| treat it as an in/out parameter and pass by reference | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out-multi |
| T& | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-inout |
| ES.56 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-move |
| Support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| Do not pass an array as a single pointer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-array |
| Support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| Support library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| C.50 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-factory |
| if there is no need to use nullptr | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-ptr-ref |
| if the object referred to should not change | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-const |
| F.43 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-dangle |
| discussion of dangling pointer prevention | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| pointer invalidation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| discussion of dangling pointer prevention | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| discussion of ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| lifetime safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| F.18 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-consume |
| F.19 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-forward |
| F.20, the general item about “out” output values | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out |
| Default arguments for virtual functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-virtual-default-arg |
| C.1: Organize related data into structures (structs or classes) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-org |
| C.2: Use class if the class has an invariant; use struct if the data members can vary independently | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| C.3: Represent the distinction between an interface and an implementation using a class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-interface |
| C.4: Make a function a member only if it needs direct access to the representation of a class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-member |
| C.5: Place helper functions in the same namespace as the class they support | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-helper |
| C.7: Don’t define a class or enum and declare a variable of its type in the same statement | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-standalone |
| C.8: Use class rather than struct if any member is non-public | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-class |
| C.9: Minimize exposure of members | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-private |
| C.concrete: Concrete types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-concrete |
| C.ctor: Constructors, assignments, and destructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-ctor |
| C.con: Containers and other resource handles | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-containers |
| C.lambdas: Function objects and lambdas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lambdas |
| C.hier: Class hierarchies (OOP) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-hier |
| C.over: Overloading and overloaded operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-overload |
| C.union: Unions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-union |
| define a class with private data as class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-class |
| Prefer to place the interface first in a class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-order |
| minimize exposure of members | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-private |
| Avoid protected data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-protected |
| “uniform function call” | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0251r0.pdf |
| multi-methods | https://web.archive.org/web/20200605021759/https://parasol.tamu.edu/~yuriys/papers/OMM10.pdf |
| overloaded operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-namespace |
| see NL.16 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-order |
| protected data is a bad idea | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-protected |
| NL.16 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-order |
| Flag protected data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-protected |
| C.10: Prefer concrete types over class hierarchies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-concrete |
| C.11: Make concrete types regular | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-regular |
| C.12: Don’t make data members const or references in a copyable or movable type | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-constref |
| C.13: If data member B uses another data member A, declare A before B | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-lifetime |
| C.20: If you can avoid defining any default operations, do | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-zero |
| C.21: If you define or =delete any copy, move, or destructor function, define or =delete them all | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-five |
| C.22: Make default operations consistent | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-matched |
| C.30: Define a destructor if a class needs an explicit action at object destruction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor |
| C.31: All resources acquired by a class must be released by the class’s destructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-release |
| C.32: If a class has a raw pointer (T*) or reference (T&), consider whether it might be owning | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-ptr |
| C.33: If a class has an owning pointer member, define a destructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-ptr2 |
| C.35: A base class destructor should be either public and virtual, or protected and non-virtual | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-virtual |
| C.36: A destructor must not fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-fail |
| C.37: Make destructors noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-noexcept |
| C.40: Define a constructor if a class has an invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-ctor |
| C.41: A constructor should create a fully initialized object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-complete |
| C.42: If a constructor cannot construct a valid object, throw an exception | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-throw |
| C.43: Ensure that a copyable class has a default constructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default0 |
| C.44: Prefer default constructors to be simple and non-throwing | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default00 |
| C.45: Don’t define a default constructor that only initializes data members; use member initializers instead | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default |
| C.46: By default, declare single-argument constructors explicit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-explicit |
| C.47: Define and initialize data members in the order of member declaration | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-order |
| C.48: Prefer default member initializers to member initializers in constructors for constant initializers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-in-class-initializer |
| C.49: Prefer initialization to assignment in constructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-initialize |
| C.50: Use a factory function if you need “virtual behavior” during initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-factory |
| C.51: Use delegating constructors to represent common actions for all constructors of a class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-delegating |
| C.52: Use inheriting constructors to import constructors into a derived class that does not need further explicit initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-inheriting |
| C.60: Make copy assignment non-virtual, take the parameter by const&, and return by non-const& | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-assignment |
| C.61: A copy operation should copy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-semantic |
| C.62: Make copy assignment safe for self-assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-self |
| C.63: Make move assignment non-virtual, take the parameter by &&, and return by non-const& | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-assignment |
| C.64: A move operation should move and leave its source in a valid state | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-semantic |
| C.65: Make move assignment safe for self-assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-self |
| C.66: Make move operations noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-noexcept |
| C.67: A polymorphic class should suppress public copy/move | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| C.80: Use =default if you have to be explicit about using the default semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-eqdefault |
| C.81: Use =delete when you want to disable default behavior (without wanting an alternative) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-delete |
| C.82: Don’t call virtual functions in constructors and destructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-ctor-virtual |
| C.83: For value-like types, consider providing a noexcept swap function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-swap |
| C.84: A swap must not fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-swap-fail |
| C.85: Make swap noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-swap-noexcept |
| C.86: Make == symmetric with respect of operand types and noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-eq |
| C.87: Beware of == on base classes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-eq-base |
| C.89: Make a hash noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-hash |
| C.90: Rely on constructors and assignment operators, not memset and memcpy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-memset |
| C.67 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| rule of zero | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-zero |
| the rule of zero | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-zero |
| the rule of five | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-five |
| should never fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-fail |
| discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-never-fail |
| R.20 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-owner |
| R.3 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ptr |
| R.4 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ref |
| A T* should not do so | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ptr |
| all default operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-five |
| this in the Discussion section | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-dtor |
| discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-never-fail |
| A destructor must not fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-fail |
| default member initializer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-in-class-initializer |
| construct valid object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-complete |
| constructor throws | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-throw |
| use a factory function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-factory |
| released by the destructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-release |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| factory functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-factory |
| Delegating constructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-delegating |
| default member initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-in-class-initializer |
| not to declare a variable until it can be properly initialized | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-init |
| moved-from state | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| Discussion of implicit conversions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-conversion |
| Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-order |
| a more general way to present arguments to a function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-view |
| Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-factory |
| a default member initializer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-in-class-initializer |
| F.18 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-consume |
| strong guarantee | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Abrahams01 |
| the basic guarantee | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Abrahams01 |
| self-assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-self |
| copy constructor vs. clone() | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| using swap | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-swap |
| The rule for copy-assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-assignment |
| copy-assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-assignment |
| self-assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-self |
| C.130 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-copy |
| factory functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-factory |
| destructors, deallocation, and swap must never fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-never-fail |
| A swap must not fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-swap-fail |
| C.41 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-complete |
| C.100: Follow the STL when defining a container | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcon-stl |
| C.101: Give a container value semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcon-val |
| C.102: Give a container move operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcon-move |
| C.103: Give a container an initializer list constructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcon-init |
| C.104: Give a container a default constructor that sets it to empty | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcon-empty |
| C.109: If a resource handle has pointer semantics, provide * and -> | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcon-ptr |
| Resources | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-resource |
| passed by value | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-in |
| F.10: If an operation can be reused, give it a name | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-name |
| F.11: Use an unnamed lambda if you need a simple function object in one place only | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-lambda |
| F.50: Use a lambda when a function won’t do (to capture local variables, or to write a local function) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-capture-vs-overload |
| F.52: Prefer capturing by reference in lambdas that will be used locally, including passed to algorithms | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-reference-capture |
| F.53: Avoid capturing by reference in lambdas that will be used non-locally, including returned, stored on the heap, or passed to another thread | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-value-capture |
| ES.28: Use lambdas for complex initialization, especially of const variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lambda-init |
| C.120: Use class hierarchies to represent concepts with inherent hierarchical structure (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-domain |
| C.121: If a base class is used as an interface, make it a pure abstract class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-abstract |
| C.122: Use abstract classes as interfaces when complete separation of interface and implementation is needed | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-separation |
| C.126: An abstract class typically doesn’t need a user-written constructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-abstract-ctor |
| C.127: A class with a virtual function should have a virtual or protected destructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-dtor |
| C.128: Virtual functions should specify exactly one of virtual, override, or final | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-override |
| C.129: When designing a class hierarchy, distinguish between implementation inheritance and interface inheritance | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-kind |
| C.130: For making deep copies of polymorphic classes prefer a virtual clone function instead of public copy construction/assignment | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-copy |
| C.131: Avoid trivial getters and setters | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-get |
| C.132: Don’t make a function virtual without reason | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-virtual |
| C.133: Avoid protected data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-protected |
| C.134: Ensure all non-const data members have the same access level | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-public |
| C.135: Use multiple inheritance to represent multiple distinct interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-mi-interface |
| C.136: Use multiple inheritance to represent the union of implementation attributes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-mi-implementation |
| C.137: Use virtual bases to avoid overly general base classes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-vbase |
| C.138: Create an overload set for a derived class and its bases with using | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-using |
| C.139: Use final on classes sparingly | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-final |
| C.140: Do not provide different default arguments for a virtual function and an overrider | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-virtual-default-arg |
| C.145: Access polymorphic objects through pointers and references | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-poly |
| C.146: Use dynamic_cast where class hierarchy navigation is unavoidable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-dynamic_cast |
| C.147: Use dynamic_cast to a reference type when failure to find the required class is considered an error | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-ref-cast |
| C.148: Use dynamic_cast to a pointer type when failure to find the required class is considered a valid alternative | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-ptr-cast |
| C.149: Use unique_ptr or shared_ptr to avoid forgetting to delete objects created using new | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-smart |
| C.150: Use make_unique() to construct objects owned by unique_ptrs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-make_unique |
| C.151: Use make_shared() to construct objects owned by shared_ptrs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-make_shared |
| C.152: Never assign a pointer to an array of derived class objects to a pointer to its base | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-array |
| C.153: Prefer virtual function to casting | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-use-virtual |
| C.35 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-dtor-virtual |
| I.25 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-abstract |
| Pimpl | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pimpl |
| C.67 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| R.20 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-owner |
| Guidelines Support Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-views |
| C.49: Prefer initialization to assignment in constructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-initialize |
| Prefer private data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-private |
| keep data out of any class used as an interface | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-abstract |
| By convention, declare such classes struct rather than class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| interface hierarchy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-abstract |
| implementation hierarchy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-kind |
| a slightly more realistic example | https://www.quora.com/What-are-the-uses-and-advantages-of-virtual-base-class-in-C%2B%2B/answer/Lance-Diduck |
| A polymorphic class should suppress copying | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| Prefer virtual functions to casting | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-use-virtual |
| static polymorphism | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| fast constant time | https://www.stroustrup.com/fast_dynamic_casting.pdf |
| type-safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-downcast |
| C.147 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-ref-cast |
| R.23 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-make_unique |
| R.22 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-make_shared |
| C.146 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-dynamic_cast |
| C.160: Define operators primarily to mimic conventional usage | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-conventional |
| C.161: Use non-member functions for symmetric operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-symmetric |
| C.162: Overload operations that are roughly equivalent | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-equivalent |
| C.163: Overload only for operations that are roughly equivalent | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-equivalent-2 |
| C.164: Avoid implicit conversion operators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-conversion |
| C.165: Use using for customization points | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-custom |
| C.166: Overload unary & only as part of a system of smart pointers and references | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-address-of |
| C.167: Use an operator for an operation with its conventional meaning | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-overload |
| C.168: Define overloaded operators in the namespace of their operands | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-namespace |
| C.170: If you feel like overloading a lambda, use a generic lambda | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-lambda |
| Copies compare equal | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-copy |
| the same namespace as their operands | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-namespace |
| Binary operators should treat their operands equivalently | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ro-symmetric |
| Operator Dot (R2) | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf |
| helper functions should be defined in the same namespace as their class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-helper |
| C.180: Use unions to save Memory | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ru-union |
| C.181: Avoid “naked” unions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ru-naked |
| C.182: Use anonymous unions to implement tagged unions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ru-anonymous |
| C.183: Don’t use a union for type punning | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ru-pun |
| Avoid “naked” unions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ru-naked |
| Enum.1: Prefer enumerations over macros | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-macro |
| Enum.2: Use enumerations to represent sets of related named constants | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-set |
| Enum.3: Prefer enum classes over “plain” enums | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-class |
| Enum.4: Define operations on enumerations for safe and simple use | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-oper |
| Enum.5: Don’t use ALL_CAPS for enumerators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-caps |
| Enum.6: Avoid unnamed enumerations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-unnamed |
| Enum.7: Specify the underlying type of an enumeration only when necessary | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-underlying |
| Enum.8: Specify enumerator values only when necessary | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-value |
| R.1: Manage resources automatically using resource handles and RAII (Resource Acquisition Is Initialization) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| R.2: In interfaces, use raw pointers to denote individual objects (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-use-ptr |
| R.3: A raw pointer (a T*) is non-owning | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ptr |
| R.4: A raw reference (a T&) is non-owning | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ref |
| R.5: Prefer scoped objects, don’t heap-allocate unnecessarily | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-scoped |
| R.6: Avoid non-const global variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-global |
| R.10: Avoid malloc() and free() | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-mallocfree |
| R.11: Avoid calling new and delete explicitly | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-newdelete |
| R.12: Immediately give the result of an explicit resource allocation to a manager object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-immediate-alloc |
| R.13: Perform at most one explicit resource allocation in a single expression statement | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-single-alloc |
| R.14: Avoid [] parameters, prefer span | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ap |
| R.15: Always overload matched allocation/deallocation pairs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-pair |
| R.20: Use unique_ptr or shared_ptr to represent ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-owner |
| R.21: Prefer unique_ptr over shared_ptr unless you need to share ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-unique |
| R.22: Use make_shared() to make shared_ptrs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-make_shared |
| R.23: Use make_unique() to make unique_ptrs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-make_unique |
| R.24: Use std::weak_ptr to break cycles of shared_ptrs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-weak_ptr |
| R.30: Take smart pointers as parameters only to explicitly express lifetime semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-smartptrparam |
| R.31: If you have non-std smart pointers, follow the basic pattern from std | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-smart |
| R.32: Take a unique_ptr parameter to express that a function assumes ownership of a widget | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-uniqueptrparam |
| R.33: Take a unique_ptr& parameter to express that a function reseats the widget | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-reseat |
| R.34: Take a shared_ptr parameter to express shared ownership | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-owner |
| R.35: Take a shared_ptr& parameter to express that a function might reseat the shared pointer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam |
| R.36: Take a const shared_ptr& parameter to express that it might retain a reference count to the object ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-sharedptrparam-const |
| R.37: Do not pass a pointer or reference obtained from an aliased smart pointer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-smartptrget |
| finally | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| leak | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-leak |
| “out” return values | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out |
| The raw pointer rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ptr |
| the raw pointer rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ptr |
| I.2 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-global |
| F.7 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-smart |
| sharedptrparam guideline | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-smartptrparam |
| NL: Naming and layout | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| ES.1: Prefer the standard library to other libraries and to “handcrafted code” | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lib |
| ES.2: Prefer suitable abstractions to direct use of language features | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-abstr |
| ES.3: Don’t repeat yourself, avoid redundant code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-dry |
| ES.5: Keep scopes small | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-scope |
| ES.6: Declare names in for-statement initializers and conditions to limit scope | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-cond |
| ES.7: Keep common and local names short, and keep uncommon and non-local names longer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-name-length |
| ES.8: Avoid similar-looking names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-name-similar |
| ES.9: Avoid ALL_CAPS names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-not-caps |
| ES.10: Declare one name (only) per declaration | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-name-one |
| ES.11: Use auto to avoid redundant repetition of type names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-auto |
| ES.12: Do not reuse names in nested scopes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-reuse |
| ES.20: Always initialize an object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-always |
| ES.21: Don’t introduce a variable (or constant) before you need to use it | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-introduce |
| ES.22: Don’t declare a variable until you have a value to initialize it with | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-init |
| ES.23: Prefer the {}-initializer syntax | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-list |
| ES.24: Use a unique_ptr to hold pointers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-unique |
| ES.25: Declare an object const or constexpr unless you want to modify its value later on | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-const |
| ES.26: Don’t use a variable for two unrelated purposes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-recycle |
| ES.27: Use std::array or stack_array for arrays on the stack | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-stack |
| ES.28: Use lambdas for complex initialization, especially of const variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lambda-init |
| ES.30: Don’t use macros for program text manipulation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-macros |
| ES.31: Don’t use macros for constants or “functions” | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-macros2 |
| ES.32: Use ALL_CAPS for all macro names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-all_caps |
| ES.33: If you must use macros, give them unique names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-macros3 |
| ES.34: Don’t define a (C-style) variadic function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-ellipses |
| ES.40: Avoid complicated expressions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-complicated |
| ES.41: If in doubt about operator precedence, parenthesize | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-parens |
| ES.42: Keep use of pointers simple and straightforward | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-ptr |
| ES.43: Avoid expressions with undefined order of evaluation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-order |
| ES.44: Don’t depend on order of evaluation of function arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-order-fct |
| ES.45: Avoid “magic constants”; use symbolic constants | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-magic |
| ES.46: Avoid narrowing conversions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-narrowing |
| ES.47: Use nullptr rather than 0 or NULL | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-nullptr |
| ES.48: Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| ES.49: If you must use a cast, use a named cast | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-named |
| ES.50: Don’t cast away const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-const |
| ES.55: Avoid the need for range checking | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-range-checking |
| ES.56: Write std::move() only when you need to explicitly move an object to another scope | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-move |
| ES.60: Avoid new and delete outside resource management functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-new |
| ES.61: Delete arrays using delete[] and non-arrays using delete | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-del |
| ES.62: Don’t compare pointers into different arrays | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-arr2 |
| ES.63: Don’t slice | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-slice |
| ES.64: Use the T{e}notation for construction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-construct |
| ES.65: Don’t dereference an invalid pointer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-deref |
| ES.70: Prefer a switch-statement to an if-statement when there is a choice | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-switch-if |
| ES.71: Prefer a range-for-statement to a for-statement when there is a choice | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-range |
| ES.72: Prefer a for-statement to a while-statement when there is an obvious loop variable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-while |
| ES.73: Prefer a while-statement to a for-statement when there is no obvious loop variable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-while-for |
| ES.74: Prefer to declare a loop variable in the initializer part of a for-statement | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-for-init |
| ES.75: Avoid do-statements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-do |
| ES.76: Avoid goto | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-goto |
| ES.77: Minimize the use of break and continue in loops | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-continue |
| ES.78: Don’t rely on implicit fallthrough in switch statements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-break |
| ES.79: Use default to handle common cases (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-default |
| ES.84: Don’t try to declare a local variable with no name | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-noname |
| ES.85: Make empty statements visible | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-empty |
| ES.86: Avoid modifying loop control variables inside the body of raw for-loops | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-loop-counter |
| ES.87: Don’t add redundant == or != to conditions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-if |
| ES.100: Don’t mix signed and unsigned arithmetic | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-mix |
| ES.101: Use unsigned types for bit manipulation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-unsigned |
| ES.102: Use signed types for arithmetic | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-signed |
| ES.103: Don’t overflow | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-overflow |
| ES.104: Don’t underflow | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-underflow |
| ES.105: Don’t divide by integer zero | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-zero |
| ES.106: Don’t try to avoid negative values by using unsigned | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-nonnegative |
| ES.107: Don’t use unsigned for subscripts, prefer gsl::index | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-subscripts |
| SL.1 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-lib |
| ES.11 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-auto |
| Don’t use a variable for two unrelated purposes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-recycle |
| ES.28 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lambda-init |
| ES.28 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lambda-init |
| ES.28 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-lambda-init |
| Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ES.30 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-macros |
| ES.31 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-macros2 |
| ES.32 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-all_caps |
| see ES.43 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-order |
| only refer to single objects | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-array |
| bounds-safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-bounds |
| contextual conversions to bool | https://en.cppreference.com/w/cpp/language/implicit_conversion#Contextual_conversions |
| type profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-reinterpretcast |
| ES.64 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-construct |
| identity casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-identitycast |
| implicit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-implicitpointercast |
| ES.64 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-construct |
| type profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-reinterpretcast |
| type profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-arithmeticcast |
| type-safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#pro-type-constcast |
| C.64 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-semantic |
| C.64 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-semantic |
| Meyers15 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers15 |
| R: Resource management | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-resource |
| no naked new rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-new |
| define the base class Shape not to allow this | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-copy-virtual |
| Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| prefer named casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-named |
| initializer notation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-list |
| C++’s model for type- and resource-safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup15 |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-raii |
| unique_ptr | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-unique_ptr |
| shared_ptr | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-shared_ptr |
| references | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-ptr-ref |
| not_null | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-nullptr |
| bounds profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-bounds |
| lifetime safety profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| ES.6 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-cond |
| modifying the loop variable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-loop-counter |
| goto | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-goto |
| see ES.107 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-subscripts |
| see ES.107 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-subscripts |
| Per.1: Don’t optimize without reason | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-reason |
| Per.2: Don’t optimize prematurely | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-knuth |
| Per.3: Don’t optimize something that’s not performance critical | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-critical |
| Per.4: Don’t assume that complicated code is necessarily faster than simple code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-simple |
| Per.5: Don’t assume that low-level code is necessarily faster than high-level code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-low |
| Per.6: Don’t make claims about performance without measurements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-measure |
| Per.7: Design to enable optimization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-efficiency |
| Per.10: Rely on the static type system | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-type |
| Per.11: Move computation from run time to compile time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-comp |
| Per.12: Eliminate redundant aliases | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-alias |
| Per.13: Eliminate redundant indirections | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-indirect |
| Per.14: Minimize the number of allocations and deallocations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-alloc |
| Per.15: Do not allocate on a critical branch | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-alloc0 |
| Per.16: Use compact data structures | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-compact |
| Per.17: Declare the most used member of a time-critical struct first | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-struct |
| Per.18: Space is time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-space |
| Per.19: Access memory predictably | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-access |
| Per.30: Avoid context switches on the critical path | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-context |
| Per.1 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-reason |
| Per.2 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-knuth |
| the root of all evil | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-knuth |
| interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-interfaces |
| use compact data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-compact |
| access it in a systematic fashion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-access |
| conventional ways | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-conventional |
| standard library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-the-standard-library |
| low-level code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-low |
| Don’t optimize prematurely | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-knuth |
| CP.1: Assume that your code will run as part of a multi-threaded program | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-multi |
| CP.2: Avoid data races | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-races |
| CP.3: Minimize explicit sharing of writable data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-data |
| CP.4: Think in terms of tasks, rather than threads | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-task |
| CP.8: Don’t try to use volatile for synchronization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-volatile |
| CP.9: Whenever feasible use tools to validate your concurrent code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-tools |
| CP.con: Concurrency | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-con |
| CP.coro: Coroutines | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-coro |
| CP.par: Parallelism | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-par |
| CP.mess: Message passing | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-mess |
| CP.vec: Vectorization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-vec |
| CP.free: Lock-free programming | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-free |
| CP.etc: Etc. concurrency rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-etc |
| Carefully study the literature | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-literature |
| CP.mess: Message Passing | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-mess |
| CP.31: prefer pass by value | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-data-by-value |
| (rare) proper uses of volatile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-volatile2 |
| clang | https://clang.llvm.org/docs/ThreadSafetyAnalysis.html |
| GCC | https://gcc.gnu.org/wiki/ThreadSafetyAnnotation |
| Thread Sanitizer | https://clang.llvm.org/docs/ThreadSanitizer.html |
| parallelism | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-par |
| messaging | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-mess |
| vectorization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-vec |
| lock free | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sscp-free |
| CP.20: Use RAII, never plain lock()/unlock() | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-raii |
| CP.21: Use std::lock() or std::scoped_lock to acquire multiple mutexes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-lock |
| CP.22: Never call unknown code while holding a lock (e.g., a callback) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-unknown |
| CP.23: Think of a joining thread as a scoped container | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-join |
| CP.24: Think of a thread as a global container | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-detach |
| CP.25: Prefer gsl::joining_thread over std::thread | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-joining_thread |
| CP.26: Don’t detach() a thread | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-detached_thread |
| CP.31: Pass small amounts of data between threads by value, rather than by reference or pointer | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-data-by-value |
| CP.32: To share ownership between unrelated threads use shared_ptr | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-shared |
| CP.40: Minimize context switching | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-switch |
| CP.41: Minimize thread creation and destruction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-create |
| CP.42: Don’t wait without a condition | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-wait |
| CP.43: Minimize time spent in a critical section | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-time |
| CP.44: Remember to name your lock_guards and unique_locks | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-name |
| CP.50: Define a mutex together with the data it guards. Use synchronized_value where possible | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-mutex |
| don’t detach() | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-detached_thread |
| use gsl::joining_thread | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-joining_thread |
| Don’t detach | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-detached_thread |
| “exporting ownership” | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-detached_thread |
| use RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-raii |
| WG21 proposal | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0290r4.html |
| CP.51: Do not use capturing lambdas that are coroutines | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcoro-capture |
| CP.52: Do not hold locks or other synchronization primitives across suspension points | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcoro-locks |
| CP.53: Parameters to coroutines should not be passed by reference | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcoro-reference-parameters |
| F.20: For “out” output values, prefer return values to output parameters | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out |
| CP.60: Use a future to return a value from a concurrent task | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-future |
| CP.61: Use async() to spawn concurrent tasks | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-async |
| R.12 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-immediate-alloc |
| CP.100: Don’t use lock-free programming unless you absolutely have to | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-lockfree |
| CP.101: Distrust your hardware/compiler combination | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-distrust |
| CP.102: Carefully study the literature | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-literature |
| CP.110: Do not write your own double-checked locking for initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-double |
| CP.111: Use a conventional pattern if you really need double-checked locking | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-double-pattern |
| Atomic variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| CP.110: Do not write your own double-checked locking for initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-double |
| CP.100: Don’t use lock-free programming unless you absolutely have to | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-lockfree |
| CP.110: Do not write your own double-checked locking for initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-double |
| CP.200: Use volatile only to talk to non-C++ memory | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-volatile2 |
| CP.200: Use volatile only to talk to non-C++ memory | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-volatile2 |
| CP.201: ??? Signals | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-signal |
| nothing to do with synchronization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconc-volatile |
| E.1: Develop an error-handling strategy early in a design | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-design |
| E.2: Throw an exception to signal that a function can’t perform its assigned task | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-throw |
| E.3: Use exceptions for error handling only | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-errors |
| E.4: Design your error-handling strategy around invariants | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-design-invariants |
| E.5: Let a constructor establish an invariant, and throw if it cannot | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-invariant |
| E.6: Use RAII to prevent leaks | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| E.7: State your preconditions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-precondition |
| E.8: State your postconditions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-postcondition |
| E.12: Use noexcept when exiting a function because of a throw is impossible or unacceptable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-noexcept |
| E.13: Never throw while being the direct owner of an object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-never-throw |
| E.14: Use purpose-designed user-defined types as exceptions (not built-in types) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-exception-types |
| E.15: Throw by value, catch exceptions from a hierarchy by reference | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-exception-ref |
| E.16: Destructors, deallocation, swap, and exception type copy/move construction must never fail | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-never-fail |
| E.17: Don’t try to catch every exception in every function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-not-always |
| E.18: Minimize the use of explicit try/catch | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-catch |
| E.19: Use a final_action object to express cleanup if no suitable resource handle is available | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| E.25: If you can’t throw exceptions, simulate RAII for resource management | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-raii |
| E.26: If you can’t throw exceptions, consider failing fast | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-crash |
| E.27: If you can’t throw exceptions, use error codes systematically | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-codes |
| E.28: Avoid error handling based on global state (e.g. errno) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw |
| E.30: Don’t use exception specifications | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-specifications |
| E.31: Properly order your catch-clauses | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re_catch |
| invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-noexcept |
| alternatives | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-raii |
| invariant | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-struct |
| If a constructor cannot construct a valid object, throw an exception | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-throw |
| final_action | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| Use of noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-noexcept |
| precondition rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pre |
| postcondition rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-post |
| exception-specifications | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-specifications |
| discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-noexcept |
| finally() | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| recommend use of const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-const |
| Don’t try to catch every exception in every function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-not-always |
| Minimize the use of explicit try/catch | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-catch |
| make move operations noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-move-noexcept |
| discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-never-fail |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| finally | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| GSL | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| proper resource management objects | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| goto exit; technique | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-codes |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| error codes | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-codes |
| Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-??? |
| Simulating RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-raii |
| Simulating RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-raii |
| simulated RAII resource management | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-raii |
| ease the pain a bit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| prefer exception-based error handling | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-throw |
| keeping functions short | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-single |
| Discussion | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sd-??? |
| Returning multiple values | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out-multi |
| Simulating RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-no-throw-raii |
| Stroustrup94 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup94 |
| noexcept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-noexcept |
| Con.1: By default, make objects immutable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconst-immutable |
| Con.2: By default, make member functions const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconst-fct |
| Con.3: By default, pass pointers and references to consts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconst-ref |
| Con.4: Use const to define objects with values that do not change after construction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconst-const |
| Con.5: Use constexpr for values that can be computed at compile time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rconst-constexpr |
| best avoided | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-const |
| Pimpl | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pimpl |
| Do not cast away const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-const |
| T.1: Use templates to raise the level of abstraction of code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-raise |
| T.2: Use templates to express algorithms that apply to many argument types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-algo |
| T.3: Use templates to express containers and ranges | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-cont |
| T.4: Use templates to express syntax tree manipulation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-expr |
| T.5: Combine generic and OO techniques to amplify their strengths, not their costs | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-generic-oo |
| T.10: Specify concepts for all template arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-concepts |
| T.11: Whenever possible use standard concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-std-concepts |
| T.12: Prefer concept names over auto for local variables | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-auto |
| T.13: Prefer the shorthand notation for simple, single-type argument concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-shorthand |
| T.20: Avoid “concepts” without meaningful semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-low |
| T.21: Require a complete set of operations for a concept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-complete |
| T.22: Specify axioms for concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-axiom |
| T.23: Differentiate a refined concept from its more general case by adding new use patterns | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-refine |
| T.24: Use tag classes or traits to differentiate concepts that differ only in semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-tag |
| T.25: Avoid complementary constraints | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-not |
| T.26: Prefer to define concepts in terms of use-patterns rather than simple syntax | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-use |
| T.30: Use concept negation (!C) sparingly to express a minor difference | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-??? |
| T.31: Use concept disjunction (C1 || C2) sparingly to express alternatives | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-??? |
| T.40: Use function objects to pass operations to algorithms | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-fo |
| T.41: Require only essential properties in a template’s concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-essential |
| T.42: Use template aliases to simplify notation and hide implementation details | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-alias |
| T.43: Prefer using over typedef for defining aliases | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-using |
| T.44: Use function templates to deduce class template argument types (where feasible) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-deduce |
| T.46: (removed) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-regular |
| T.47: Avoid highly visible unconstrained templates with common names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-visible |
| T.48: If your compiler does not support concepts, fake them with enable_if | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-concept-def |
| T.49: Where possible, avoid type-erasure | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-erasure |
| T.60: Minimize a template’s context dependencies | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-depend |
| T.61: Do not over-parameterize members (SCARY) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-scary |
| T.62: Place non-dependent class template members in a non-templated base class | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-nondependent |
| T.64: Use specialization to provide alternative implementations of class templates | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-specialization |
| T.65: Use tag dispatch to provide alternative implementations of functions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-tag-dispatch |
| T.67: Use specialization to provide alternative implementations for irregular types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-specialization2 |
| T.68: Use {} rather than () within templates to avoid ambiguities | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-cast |
| T.69: Inside a template, don’t make an unqualified non-member function call unless you intend it to be a customization point | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-customization |
| T.80: Do not naively templatize a class hierarchy | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-hier |
| T.81: Do not mix hierarchies and arrays | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-array |
| T.82: Linearize a hierarchy when virtual functions are undesirable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-linear |
| T.83: Do not declare a member function template virtual | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-virtual |
| T.84: Use a non-template core implementation to provide an ABI-stable interface | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-abi |
| T.??: ???? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-??? |
| T.100: Use variadic templates when you need a function that takes a variable number of arguments of a variety of types | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-variadic |
| T.101: ??? How to pass arguments to a variadic template ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-variadic-pass |
| T.102: ??? How to process arguments to a variadic template ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-variadic-process |
| T.103: Don’t use variadic templates for homogeneous argument lists | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-variadic-not |
| T.??: ???? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-??? |
| T.120: Use template metaprogramming only when you really need to | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-metameta |
| T.121: Use template metaprogramming primarily to emulate concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-emulate |
| T.122: Use templates (usually template aliases) to compute types at compile time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-tmp |
| T.123: Use constexpr functions to compute values at compile time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-fct |
| T.124: Prefer to use standard-library TMP facilities | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-std-tmp |
| T.125: If you need to go beyond the standard-library TMP facilities, use an existing library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-lib |
| T.??: ???? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-??? |
| T.140: If an operation can be reused, give it a name | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-name |
| T.141: Use an unnamed lambda if you need a simple function object in one place only | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-lambda |
| T.142: Use template variables to simplify notation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-var |
| T.143: Don’t write unintentionally non-generic code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-non-generic |
| T.144: Don’t specialize function templates | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-specialize-function |
| T.150: Check that a class matches a concept using static_assert | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-check-class |
| T.??: ???? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-??? |
| Stable base | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-abi |
| don’t overuse type erasure | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-erasure |
| T.10: Specify concepts for all template arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-concepts |
| T.11: Whenever possible use standard concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-std-concepts |
| T.12: Prefer concept names over auto | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-auto |
| T.13: Prefer the shorthand notation for simple, single-type argument concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-shorthand |
| T.20: Avoid “concepts” without meaningful semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-low |
| T.21: Require a complete set of operations for a concept | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-complete |
| T.22: Specify axioms for concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-axiom |
| T.23: Differentiate a refined concept from its more general case by adding new use patterns | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-refine |
| T.24: Use tag classes or traits to differentiate concepts that differ only in semantics | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-tag |
| T.25: Avoid complimentary constraints | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-not |
| T.26: Prefer to define concepts in terms of use-patterns rather than simple syntax | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-use |
| GSL | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#gsl-guidelines-support-library |
| an early experiment | https://www.stroustrup.com/sle2010_webversion.pdf |
| a concept must make semantic sense | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-low |
| Palo Alto TR | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-references |
| T.24 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-tag |
| Template parameter deduction for constructors (Rev. 3) | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0091r1.html |
| complementary constraints | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-not |
| T.69 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-customization |
| SCARY | https://www.open-std.org/jtc1/sc22/WG21/docs/papers/2009/n2911.pdf |
| T.61 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-scary |
| unintentionally invoking unconstrained function templates | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-visible |
| “stable base” | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-abi |
| OO and GP | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-generic-oo |
| T* points to an individual object rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-ptr |
| no-slicing rule | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-slice |
| Pimpl | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-pimpl |
| How to emulate concepts if you don’t have language support | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-emulate |
| constexpr function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rt-fct |
| F.10 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-name |
| F.11 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-lambda |
| CPL.1: Prefer C++ to C | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcpl-c |
| CPL.2: If you must use C, use the common subset of C and C++, and compile the C code as C++ | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcpl-subset |
| CPL.3: If you must use C for interfaces, use C++ in the calling code using such interfaces | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rcpl-interface |
| SF.1: Use a .cpp suffix for code files and .h for interface files if your project doesn’t already follow another convention | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-file-suffix |
| SF.2: A header file must not contain object definitions or non-inline function definitions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-inline |
| SF.3: Use header files for all declarations used in multiple source files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-declaration-header |
| SF.4: Include header files before other declarations in a file | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-include-order |
| SF.5: A .cpp file must include the header file(s) that defines its interface | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-consistency |
| SF.6: Use using namespace directives for transition, for foundation libraries (such as std), or within a local scope (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-using |
| SF.7: Don’t write using namespace at global scope in a header file | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-using-directive |
| SF.8: Use #include guards for all header files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-guards |
| SF.9: Avoid cyclic dependencies among source files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-cycles |
| SF.10: Avoid dependencies on implicitly #included names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-implicit |
| SF.11: Header files should be self-contained | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-contained |
| SF.12: Prefer the quoted form of #include for files relative to the including file and the angle bracket form everywhere else | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-incform |
| SF.13: Use portable header identifiers in #include statements | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-portable-header-id |
| SF.20: Use namespaces to express logical structure | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-namespace |
| SF.21: Don’t use an unnamed (anonymous) namespace in a header | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-unnamed |
| SF.22: Use an unnamed (anonymous) namespace for all internal/non-exported entities | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-unnamed2 |
| NL.27 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-file-suffix |
| Working Draft, Extensions to C++ for Modules | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4592.pdf |
| Modules, Componentization, and Transition | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0141r0.pdf |
| Don’t write using namespace at global scope in a header file | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rs-using-directive |
| the rules | https://eel.is/c++draft/over.literal |
| rule P.2 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rp-cplusplus |
| standard | https://eel.is/c++draft/cpp.include |
| standard | https://eel.is/c++draft/cpp.include |
| SL.con: Containers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-con |
| SL.str: String | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-string |
| SL.io: Iostream | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-io |
| SL.regex: Regex | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-regex |
| SL.chrono: Time | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-chrono |
| SL.C: The C Standard Library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-clib |
| SL.1: Use libraries wherever possible | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-lib |
| SL.2: Prefer the standard library to other libraries | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-sl |
| SL.3: Do not add non-standard entities to namespace std | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-std |
| SL.4: Use the standard library in a type-safe manner | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-safe |
| SL.4: Use the standard library in a type-safe manner | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#sl-safe |
| SL.con.1: Prefer using STL array or vector instead of a C array | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-arrays |
| SL.con.2: Prefer using STL vector by default unless you have a reason to use a different container | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-vector |
| SL.con.3: Avoid bounds errors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-bounds |
| SL.con.4: don’t use memset or memcpy for arguments that are not trivially-copyable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-copy |
| Prefer the {}-initializer syntax | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-list |
| bounds profile | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-bounds |
| regular expressions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-regex |
| SL.str.1: Use std::string to own character sequences | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-string |
| SL.str.2: Use std::string_view or gsl::span to refer to character sequences | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-view |
| SL.str.3: Use zstring or czstring to refer to a C-style, zero-terminated, sequence of characters | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-zstring |
| SL.str.4: Use char* to refer to a single character | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-charp |
| SL.str.5: Use std::byte to refer to byte values that do not necessarily represent characters | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-byte |
| SL.str.10: Use std::string when you need to perform locale-sensitive string operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-locale |
| SL.str.11: Use gsl::span rather than std::string_view when you need to mutate a string | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-span |
| SL.str.12: Use the s suffix for string literals meant to be standard-library strings | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-s |
| F.24 span | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-range |
| F.25 zstring | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-zstring |
| Don’t optimize prematurely | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rper-knuth |
| zstring | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-zstring |
| string | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-string |
| string_view | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-view |
| locale facilities | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rstr-locale |
| SL.io.1: Use character-level input only when you have to | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rio-low |
| SL.io.2: When reading, always consider ill-formed input | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rio-validate |
| SL.io.3: Prefer iostreams for I/O | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rio-streams |
| SL.io.10: Unless you use printf-family functions call ios_base::sync_with_stdio(false) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rio-sync |
| SL.io.50: Avoid endl | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rio-endl |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| SL.C.1: Don’t use setjmp/longjmp | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rclib-jmp |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| A.1: Separate stable code from less stable code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ra-stable |
| A.2: Express potentially reusable parts as a library | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ra-lib |
| A.4: There should be no cycles among libraries | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ra-dag |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| ??? | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#??? |
| NR.1: Don’t insist that all declarations should be at the top of a function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-top |
| NR.2: Don’t insist on having only a single return-statement in a function | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-single-return |
| NR.3: Don’t avoid exceptions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-no-exceptions |
| NR.4: Don’t insist on placing each class definition in its own source file | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-lots-of-files |
| NR.5: Don’t use two-phase initialization | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-two-phase-init |
| NR.6: Don’t place all cleanup actions at the end of a function and goto exit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-goto-exit |
| NR.7: Don’t make data members protected | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-protected-data |
| Always initialize an object | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-always |
| ES.21: Don’t introduce a variable (or constant) before you need to use it | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-introduce |
| goto exit | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rnr-goto-exit |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| RAII | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-raii |
| finally | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#re-finally |
| Avoid protected data | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-protected |
| RF.rules: Coding rules | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-rules |
| RF.books: Books with coding guidelines | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-books |
| RF.C++: C++ Programming (C++11/C++14/C++17) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-cplusplus |
| RF.web: Websites | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-web |
| RS.video: Videos about “modern C++” | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-vid |
| RF.man: Manuals | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-man |
| RF.core: Core Guidelines materials | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-core |
| AUTOSAR Guidelines for the use of the C++14 language in critical and safety-related systems v22.11 | https://www.autosar.org/fileadmin/standards/R22-11/AP/AUTOSAR_RS_CPP14Guidelines.pdf |
| MISRA C++:2023 | https://misra.org.uk/product/misra-cpp2023/ |
| Boost Library Requirements and Guidelines | https://www.boost.org/development/requirements.html |
| Bloomberg: BDE C++ Coding | https://github.com/bloomberg/bde/wiki/CodingStandards.pdf |
| GCC Coding Conventions | https://gcc.gnu.org/codingconventions.html |
| Google C++ Style Guide | https://google.github.io/styleguide/cppguide.html |
| JSF++: JOINT STRIKE FIGHTER AIR VEHICLE C++ CODING STANDARDS | https://www.stroustrup.com/JSF-AV-rules.pdf |
| MISRA C++:2023 Guidelines for the use C++17 in critical systems | https://misra.org.uk/product/misra-cpp2023/ |
| Using C++ in Mozilla Code | https://firefox-source-docs.mozilla.org/code-quality/coding-style/using_cxx_in_firefox_code.html |
| Geosoft.no: C++ Programming Style Guidelines | https://geosoft.no/development/cppstyle.html |
| Possibility.com: C++ Coding Standard | https://www.possibility.com/Cpp/CppCodingStandard.html |
| SEI CERT: Secure C++ Coding Standard | https://wiki.sei.cmu.edu/confluence/x/Wnw-BQ |
| High Integrity C++ Coding Standard | https://www.codingstandard.com/ |
| llvm | https://llvm.org/docs/CodingStandards.html |
| Meyers96 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers96 |
| Meyers97 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers97 |
| Meyers01 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers01 |
| Meyers05 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers05 |
| Meyers15 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers15 |
| SuttAlex05 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#SuttAlex05 |
| Stroustrup05 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup05 |
| A rationale for semantically enhanced library languages | https://www.stroustrup.com/SELLrationale.pdf |
| Stroustrup14 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup05 |
| A Tour of C++ | https://www.stroustrup.com/Tour.html |
| Stroustrup13 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup13 |
| The C++ Programming Language (4th Edition) | https://www.stroustrup.com/4th.html |
| Style Guide | https://www.stroustrup.com/Programming/PPP-style.pdf |
| Programming: Principles and Practice using C++ | https://www.stroustrup.com/programming.html |
| TC++PL4 | https://www.stroustrup.com/4th.html |
| Tour++ | https://www.stroustrup.com/Tour.html |
| Programming: Principles and Practice using C++ | https://www.stroustrup.com/programming.html |
| isocpp.org | https://isocpp.org |
| Bjarne Stroustrup’s home pages | https://www.stroustrup.com |
| WG21 | https://www.open-std.org/jtc1/sc22/wg21/ |
| Boost | https://www.boost.org |
| Adobe open source | https://opensource.adobe.com/ |
| Poco libraries | https://pocoproject.org/ |
| C++11 Style | https://learn.microsoft.com/en-us/shows/goingnative-2012/keynote-bjarne-stroustrup-cpp11-style |
| The Essence of C++: With Examples in C++84, C++98, C++11, and C++14 | https://learn.microsoft.com/en-us/shows/goingnative-2013/opening-keynote-bjarne-stroustrup |
| CppCon ’14 | https://isocpp.org/blog/2014/11/cppcon-videos-c9 |
| The essence of C++ | https://www.youtube.com/watch?v=86xWVb4XIyE |
| The Evolution of C++ Past, Present and Future | https://www.youtube.com/watch?v=_wzc7a3McOs |
| Make Simple Tasks Simple! | https://www.youtube.com/watch?v=nesCaocNjtQ |
| Writing Good C++14 | https://www.youtube.com/watch?v=1OEu9C51K2A |
| Writing Good C++14… By Default | https://www.youtube.com/watch?v=hEx5DNLWGgA |
| ISO C++ Standard C++17 | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf |
| Palo Alto “Concepts” TR | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf |
| ISO C++ Concepts TS | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4553.pdf |
| WG21 Ranges report | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4569.pdf |
| Our documents directory | https://github.com/isocpp/CppCoreGuidelines/tree/master/docs |
| A brief introduction to C++’s model for type- and resource-safety | https://www.stroustrup.com/resource-model.pdf |
| a Core Guidelines talk | https://www.youtube.com/watch?v=DyLwdl_6vmU |
| slides | https://www.slideshare.net/slideshow/c-core-guidelines-72335317/72335317 |
| The Guideline Support Library: One Year Later | https://www.youtube.com/watch?v=_GhNnCuaEjo |
| Writing Good C++14 | https://www.youtube.com/watch?v=1OEu9C51K2A |
| Writing Good C++14… By Default | https://www.youtube.com/watch?v=hEx5DNLWGgA |
| C++ Core Guidelines - Modernize your C++ Code Base | https://www.youtube.com/watch?v=fQ926v4ZzAM |
| No Littering! | https://www.youtube.com/watch?v=01zI9kV4h8c |
| gradual adoption | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-modernizing |
| Pro.type: Type safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-type |
| Pro.bounds: Bounds safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-bounds |
| Pro.lifetime: Lifetime safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| Bounds safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-bounds |
| Lifetime safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| prefer named casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-named |
| Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| prefer named casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-named |
| Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| Avoid casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts |
| Use dynamic_cast instead | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rh-dynamic_cast |
| Don’t cast away const | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-const |
| construction | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-construct |
| named casts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-casts-named |
| always initialize | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-always |
| always initialize | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-always |
| default constructors | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-default0 |
| default member initializers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-in-class-initializer |
| Use variant instead | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ru-naked |
| Don’t use va_arg arguments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#f-varargs |
| Bounds safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-bounds |
| Lifetime safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| Type safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-type |
| Lifetime safety | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-lifetime |
| Pass pointers to single objects (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-array |
| Keep pointer arithmetic simple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-ptr |
| Pass pointers to single objects (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-array |
| Keep pointer arithmetic simple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-ptr |
| Pass pointers to single objects (only) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ri-array |
| Keep pointer arithmetic simple | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-ptr |
| Use the standard library in a type-safe manner | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rsl-bounds |
| See the current design specification here. | https://github.com/isocpp/CppCoreGuidelines/blob/master/docs/Lifetime.pdf |
| detect or avoid | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-deref |
| GSL: Guidelines support library | https://github.com/Microsoft/GSL |
| the one voted into C++17 | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html |
| GSL.view: Views | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-views |
| GSL.owner: Ownership pointers | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-ownership |
| GSL.assert: Assertions | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-assertions |
| GSL.util: Utilities | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-utilities |
| GSL.concept: Concepts | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-gsl-concepts |
| R.4 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rr-ref |
| the contract proposal | https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0380r1.pdf |
| NL.1: Don’t say in comments what can be clearly stated in code | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-comments |
| NL.2: State intent in comments | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-comments-intent |
| NL.3: Keep comments crisp | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-comments-crisp |
| NL.4: Maintain a consistent indentation style | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-indent |
| NL.5: Avoid encoding type information in names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-name-type |
| NL.7: Make the length of a name roughly proportional to the length of its scope | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-name-length |
| NL.8: Use a consistent naming style | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-name |
| NL.9: Use ALL_CAPS for macro names only | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-all-caps |
| NL.10: Prefer underscore_style names | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-camel |
| NL.11: Make literals readable | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-literals |
| NL.15: Use spaces sparingly | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-space |
| NL.16: Use a conventional class member declaration order | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-order |
| NL.17: Use K&R-derived layout | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-knr |
| NL.18: Use C++-style declarator layout | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-ptr |
| NL.19: Avoid names that are easily misread | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-misread |
| NL.20: Don’t place two statements on the same line | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-stmt |
| NL.21: Declare one name (only) per declaration | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-dcl |
| NL.25: Don’t use void as an argument type | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-void |
| NL.26: Use conventional const notation | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-const |
| NL.27: Use a .cpp suffix for code files and .h for interface files | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-file-suffix |
| PPP Style Guide | https://www.stroustrup.com/Programming/PPP-style.pdf |
| Programming: Principles and Practice using C++ | https://www.stroustrup.com/programming.html |
| Stroustrup | https://www.stroustrup.com/Programming/PPP-style.pdf |
| Enum.5: Don’t use ALL_CAPS for enumerators | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#renum-caps |
| consistency | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rl-name |
| when you have no constraints or better ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| Stroustrup | https://www.stroustrup.com/Programming/PPP-style.pdf |
| “magic constants” | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-magic |
| when you have no constraints or better ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| when you have no constraints or better ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| when you have no constraints or better ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| when you have no constraints or better ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| ES.10 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#res-name-one |
| when you have no constraints or better ideas | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-naming |
| top of this page | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#s-abstract |
| Bjarne Stroustrup in his CppCon 2015 opening keynote, “Writing Good C++14” | https://isocpp.org/blog/2015/09/stroustrup-cppcon15-keynote |
| accompanying isocpp.org blog post | https://isocpp.org/blog/2015/09/bjarne-stroustrup-announces-cpp-core-guidelines |
| Herb Sutter’s follow-up CppCon 2015 talk, “Writing Good C++14 … By Default” | https://isocpp.org/blog/2015/09/sutter-cppcon15-day2plenary |
| CONTRIBUTING.md | https://github.com/isocpp/CppCoreGuidelines/blob/master/CONTRIBUTING.md |
| CONTRIBUTING.md | https://github.com/isocpp/CppCoreGuidelines/blob/master/CONTRIBUTING.md |
| github.com/cplusplus | https://github.com/cplusplus |
| C++ FAQ | https://isocpp.org/faq |
| CommonMark | https://commonmark.org |
| GitHub Flavored Markdown (GFM) | https://help.github.com/articles/github-flavored-markdown/ |
| github.com/Microsoft/GSL | https://github.com/Microsoft/GSL |
| use span | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-views |
| [Cline99] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cline99 |
| [Dewhurst03] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Dewhurst03 |
| [Koenig97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Koenig97 |
| [Lakos96] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Lakos96 |
| [Meyers97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers97 |
| [Murray93] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Murray93 |
| [Sutter00] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Sutter00 |
| [Taligent94] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Taligent94 |
| SuttAlex05 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#SuttAlex05 |
| [Alexandrescu01] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Alexandrescu01 |
| [Boost] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Boost |
| [Dewhurst03] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Dewhurst03 |
| [Meyers97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers97 |
| [Stroustrup00] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup00 |
| [Taligent94] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Taligent94 |
| [SuttAlex05] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#SuttAlex05 |
| [Cargill92] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cargill92 |
| [Cline99] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cline99 |
| [Henricson97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Henricson97 |
| [Koenig97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Koenig97 |
| [Meyers97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers97 |
| [Stroustrup00] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup00 |
| [Sutter02] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Sutter02 |
| [Sutter04] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Sutter04 |
| [C++03] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cplusplus03 |
| [C++03] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cplusplus03 |
| [SuttAlex05] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#SuttAlex05 |
| [C++03] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cplusplus03 |
| [Meyers96] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Meyers96 |
| [Stroustrup00] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup00 |
| [Sutter00] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Sutter00 |
| [Sutter02] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Sutter02 |
| [SuttAlex05] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#SuttAlex05 |
| [Cline99] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Cline99 |
| [Koenig97] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Koenig97 |
| [Stroustrup00] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#Stroustrup00 |
| [SuttHysl04b] | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#SuttHysl04b |
| Provide strong resource safety; that is, never leak anything that you think of as a resource | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-safety |
| Never return or throw while holding a resource not owned by a handle | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-never |
| A “raw” pointer or reference is never a resource handle | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-raw |
| Never let a pointer outlive the object it points to | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-outlive |
| Use templates to express containers (and other resource handles) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-templates |
| Return containers by value (relying on move or copy elision for efficiency) | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-value-return |
| If a class is a resource handle, it needs a constructor, a destructor, and copy and/or move operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-handle |
| If a class is a container, give it an initializer-list constructor | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#cr-list |
| the copy, move, and destruction operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rc-five |
| F.20, the general item about “out” output values | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out |
| F.20 | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#rf-out |
| the default operations | https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines.html#ss-ctor |
| Clang-tidy | https://clang.llvm.org/extra/clang-tidy/checks/list.html |
| CppCoreCheck | https://docs.microsoft.com/en-us/visualstudio/code-quality/using-the-cpp-core-guidelines-checkers |
| Programming: Principles and Practice using C++ | https://www.stroustrup.com/programming.html |
| Standard C++ Foundation | https://isocpp.org |
| iso.org | https://iso.org |
| Technical Specification | https://www.iso.org/deliverables-all.html?type=ts |
| Exception-Safety in Generic Components | https://www.boost.org/community/exception_safety.html |
| A rationale for semantically enhanced library languages | https://www.stroustrup.com/SELLrationale.pdf |
| The C++ Programming Language (4th Edition) | https://www.stroustrup.com/4th.html |
| A Tour of C++ | https://www.stroustrup.com/Tour.html |
| A brief introduction to C++’s model for type- and resource-safety | https://github.com/isocpp/CppCoreGuidelines/blob/master/docs/Introduction%20to%20type%20and%20resource%20safety.pdf |
| Collecting Shared Objects | https://web.archive.org/web/20120926011837/http://www.drdobbs.com/collecting-shared-objects/184401839 |