diff --git a/.github/ISSUE_TEMPLATE/topic-proposal.md b/.github/ISSUE_TEMPLATE/topic-proposal.md deleted file mode 100644 index ed5be370..00000000 --- a/.github/ISSUE_TEMPLATE/topic-proposal.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Topic proposal -about: Describes a topic that should be considered by SG20 for education guidelines -title: "[TOPIC-REQUEST]" -labels: Needs triaging -assignees: vulder, jcvw - ---- - - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index ec04b4c2..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -# This action is used to perform a test build of the document that includes -# performing spell checking. - -name: ci - -on: - pull_request: - push: - branches: - master - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - ############################################################ - - name: Prepare to build the document. - shell: bash - run: tools/build/prebuild - ############################################################ - - name: Build the document. - shell: bash - run: | - tools/build/build \ - -d ${{runner.temp}}/output \ - -v ${GITHUB_REF#refs/*/} \ - -s - ############################################################ diff --git a/.github/workflows/ci_tool_tests.yml b/.github/workflows/ci_tool_tests.yml deleted file mode 100644 index 192b4282..00000000 --- a/.github/workflows/ci_tool_tests.yml +++ /dev/null @@ -1,32 +0,0 @@ -# This action is used to run tests to ensure all tools work like expected. - -name: Tool CI - -on: - pull_request: - -jobs: - build: - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: [3.7, 3.8, 3.9] - - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - - name: Install dependencies - run: | - pip install -r tools/requirements.txt - - - name: Run unittests - run: | - cd tools - pytest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 486c47c0..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,39 +0,0 @@ -# This is an action that builds the document and deploys the build document -# to its associated GitHub pages site. - -name: release - -on: - push: - tags: - - 'v*.*.*' - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - ############################################################ - - name: Prepare to build the document. - shell: bash - run: tools/build/prebuild - ############################################################ - - name: Collect git metadata - id: git_metadata - run: | - echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT - # The following builds the document in multiple formats for deployment. - - name: Build the document. - shell: bash - run: | - tools/build/build \ - -d ${{runner.temp}}/output \ - -v ${{ steps.git_metadata.outputs.VERSION }} - - name: Deploy generated content to gh-pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ${{runner.temp}}/output - keep_files: true diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d265188a..00000000 --- a/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -__pycache__/ - -# Ignore generated files -sources/contributors.md -sources/guidelines.epub -sources/guidelines.html -sources/guidelines.texi -sources/guidelines_html/ -sources/knowledge_areas_summary.md -sources/main.gen.md -sources/main.pre.md -sources/spellcheck_expected_sorted.txt -sources/spellcheck_result.txt diff --git a/.mailmap b/.mailmap deleted file mode 100644 index 603128ff..00000000 --- a/.mailmap +++ /dev/null @@ -1 +0,0 @@ -Florian Sattler diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/0.0.11/guidelines.epub b/0.0.11/guidelines.epub new file mode 100644 index 00000000..8017870f Binary files /dev/null and b/0.0.11/guidelines.epub differ diff --git a/sources/images/cpp_logo.png b/0.0.11/html/images/cpp_logo.png similarity index 100% rename from sources/images/cpp_logo.png rename to 0.0.11/html/images/cpp_logo.png diff --git a/0.0.11/html/index.html b/0.0.11/html/index.html new file mode 100644 index 00000000..35f1efbf --- /dev/null +++ b/0.0.11/html/index.html @@ -0,0 +1,1448 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.11

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.11/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.11/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.11/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics. [Note: Can I suggest that we use the term “area” or “unit” instead of “module”? I think that these other choices are better and also avoid any potential confusion over what is meant by “module” (i.e., C++ term versus plain English term).]

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational. This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it. [Note: Isn’t this just “novice”/“beginner”?]

  • +
  • main. This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved. [Note: The term “main” is not very descriptive/helpful. Could I suggest using “intermediate”?]

  • +
  • advanced. This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.2.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.2.4 Foundational: Using UDLs

+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.2.4.4 Points to cover

+

This section lists important details for each point.

+

8.2.5 Main: implementing UDLs

+

8.2.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.3.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.3.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

8.3.4 Foundational: Using and defining functions with default arguments

+

8.3.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.3.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.3.5 Main: implementing *

+

8.3.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

8.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

8.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.3.5.4 Points to cover

+

This section lists important details for each point.

+

8.3.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.5 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.5.1 Foundational: Writing requires-expressions

+

8.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.5.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.5.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.5.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.5.2 Main: Advanced requirements

+

8.5.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.5.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.5.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.5.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.5.3 Advanced

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.11/html_split/Advanced.html b/0.0.11/html_split/Advanced.html new file mode 100644 index 00000000..c4d659ae --- /dev/null +++ b/0.0.11/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.11/html_split/Background_002fRequired-Knowledge.html b/0.0.11/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..d3ee1856 --- /dev/null +++ b/0.0.11/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,65 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] +* explain what an object is? +[C++ object +model: objects], +[C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.11/html_split/Background_002fRequired-knowledge.html b/0.0.11/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..6535d702 --- /dev/null +++ b/0.0.11/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.11/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.11/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.11/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.11/html_split/Building.html b/0.0.11/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.11/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.11/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.11/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..6d7350cc --- /dev/null +++ b/0.0.11/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.11/html_split/Caveats.html b/0.0.11/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.11/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.11/html_split/Compilation-Model.html b/0.0.11/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.11/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.11/html_split/Compile_002dTime-Computation.html b/0.0.11/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.11/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.11/html_split/Context-and-Aim-of-This-Guide.html b/0.0.11/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.11/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.11/html_split/Contributing-to-This-Document.html b/0.0.11/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.11/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.11/html_split/Contributors.html b/0.0.11/html_split/Contributors.html new file mode 100644 index 00000000..53ba0efb --- /dev/null +++ b/0.0.11/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.11/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.11/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..c8c9fcd3 --- /dev/null +++ b/0.0.11/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.11/html_split/Disclaimer.html b/0.0.11/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.11/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.11/html_split/Error-Handling.html b/0.0.11/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.11/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.11/html_split/Examples-of-Course-Curricula.html b/0.0.11/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.11/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.11/html_split/External-ie-Non-Standard-Libraries.html b/0.0.11/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.11/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.11/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.11/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.11/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.11/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.11/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.11/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Foundational-Using-UDLs.html b/0.0.11/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..adb461e8 --- /dev/null +++ b/0.0.11/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.11/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..e37a992c --- /dev/null +++ b/0.0.11/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.11/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.11/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..6846c6e7 --- /dev/null +++ b/0.0.11/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Functions-default-argument.html b/0.0.11/html_split/Functions-default-argument.html new file mode 100644 index 00000000..2571ca9e --- /dev/null +++ b/0.0.11/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.11/html_split/Functions-user_002ddefined-literals.html b/0.0.11/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..7e41de9c --- /dev/null +++ b/0.0.11/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,66 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Functions.html b/0.0.11/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.11/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.11/html_split/Generic-Programming-Templates.html b/0.0.11/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.11/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.11/html_split/Glossary.html b/0.0.11/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.11/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.11/html_split/How-To-Contribute.html b/0.0.11/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.11/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.11/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.11/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.11/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.11/html_split/License.html b/0.0.11/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.11/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.11/html_split/Main-Advanced-requirements.html b/0.0.11/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..d8a1d025 --- /dev/null +++ b/0.0.11/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Main-Contracts-and-static_005fassert.html b/0.0.11/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.11/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.11/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.11/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Main-implementing-UDLs.html b/0.0.11/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..1f6f3816 --- /dev/null +++ b/0.0.11/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.11/html_split/Main-implementing-_002a.html b/0.0.11/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..8ce971de --- /dev/null +++ b/0.0.11/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.11/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.11/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..f81a34e9 --- /dev/null +++ b/0.0.11/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.11/html_split/Module-name-Requires-Expressions.html b/0.0.11/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..8bab76c8 --- /dev/null +++ b/0.0.11/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.11/html_split/Motivation.html b/0.0.11/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.11/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.11/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.11/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..cb9f10d2 --- /dev/null +++ b/0.0.11/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.11/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.11/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.11/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.11/html_split/Organization-of-This-Document.html b/0.0.11/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..3e489855 --- /dev/null +++ b/0.0.11/html_split/Organization-of-This-Document.html @@ -0,0 +1,101 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. [Note: Can I suggest that we use the term +“area” or “unit” instead of “module”? I think that these other +choices are better and also avoid any potential confusion over what is +meant by “module” (i.e., C++ term versus plain English term).] +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.11/html_split/Overview.html b/0.0.11/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.11/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.11/html_split/Points-to-cover.html b/0.0.11/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.11/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.11/html_split/Preprocessor.html b/0.0.11/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.11/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.11/html_split/References-on-Learning-Outcomes.html b/0.0.11/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.11/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.11/html_split/References.html b/0.0.11/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.11/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.11/html_split/Software-Design.html b/0.0.11/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.11/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.11/html_split/Standard-Library.html b/0.0.11/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.11/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.11/html_split/Student-outcomes.html b/0.0.11/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.11/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.11/html_split/Summary-of-Modules-and-Topics.html b/0.0.11/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.11/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.11/html_split/Testing-and-Debugging.html b/0.0.11/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.11/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.11/html_split/Tooling.html b/0.0.11/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.11/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.11/html_split/Topic-introduction.html b/0.0.11/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.11/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.11/html_split/Use-of-This-Document.html b/0.0.11/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.11/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.11/html_split/User_002dDefined-Types-Classes.html b/0.0.11/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.11/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.11/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.11/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.11/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.11/html_split/_0023advanced.html b/0.0.11/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.11/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.11/html_split/_0023advanced_002d1.html b/0.0.11/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.11/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.11/html_split/_0023advanced_002d2.html b/0.0.11/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.11/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.11/html_split/_0023advanced_002d3.html b/0.0.11/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.11/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..d23012ce --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.11/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.11/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.11/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.11/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.11/html_split/_0023building.html b/0.0.11/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.11/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.11/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.11/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.11/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.11/html_split/_0023caveats.html b/0.0.11/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.11/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.11/html_split/_0023caveats_002d1.html b/0.0.11/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.11/html_split/_0023caveats_002d2.html b/0.0.11/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.11/html_split/_0023caveats_002d3.html b/0.0.11/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.11/html_split/_0023caveats_002d4.html b/0.0.11/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.11/html_split/_0023caveats_002d5.html b/0.0.11/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.11/html_split/_0023caveats_002d6.html b/0.0.11/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.11/html_split/_0023caveats_002d7.html b/0.0.11/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.11/html_split/_0023caveats_002d8.html b/0.0.11/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.11/html_split/_0023caveats_002d9.html b/0.0.11/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.11/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.11/html_split/_0023compilation_002dmodel.html b/0.0.11/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.11/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.11/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.11/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.11/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.11/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.11/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.11/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.11/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.11/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.11/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.11/html_split/_0023contributors.html b/0.0.11/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.11/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.11/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.11/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.11/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.11/html_split/_0023disclaimer.html b/0.0.11/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.11/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.11/html_split/_0023error_002dhandling.html b/0.0.11/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.11/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.11/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.11/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.11/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.11/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.11/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.11/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.11/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.11/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.11/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.11/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.11/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.11/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.11/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.11/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.11/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.11/html_split/_0023foundational_002dusing_002dudls.html b/0.0.11/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.11/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.11/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.11/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.11/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.11/html_split/_0023functions.html b/0.0.11/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.11/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.11/html_split/_0023functions_002ddefault_002dargument.html b/0.0.11/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.11/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.11/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.11/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.11/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.11/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.11/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.11/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.11/html_split/_0023glossary.html b/0.0.11/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.11/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.11/html_split/_0023how_002dto_002dcontribute.html b/0.0.11/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.11/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.11/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.11/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.11/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.11/html_split/_0023license.html b/0.0.11/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.11/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.11/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.11/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.11/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.11/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.11/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.11/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.11/html_split/_0023main_002dimplementing.html b/0.0.11/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.11/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.11/html_split/_0023main_002dimplementing_002dudls.html b/0.0.11/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.11/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.11/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.11/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.11/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.11/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.11/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.11/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.11/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.11/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.11/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.11/html_split/_0023motivation.html b/0.0.11/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.11/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.11/html_split/_0023motivation_002d1.html b/0.0.11/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.11/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.11/html_split/_0023motivation_002d2.html b/0.0.11/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.11/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.11/html_split/_0023motivation_002d3.html b/0.0.11/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.11/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.11/html_split/_0023motivation_002d4.html b/0.0.11/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.11/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.11/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.11/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.11/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.11/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.11/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.11/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.11/html_split/_0023overview.html b/0.0.11/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.11/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.11/html_split/_0023overview_002d1.html b/0.0.11/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.11/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.11/html_split/_0023overview_002d2.html b/0.0.11/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.11/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.11/html_split/_0023overview_002d3.html b/0.0.11/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.11/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.11/html_split/_0023overview_002d4.html b/0.0.11/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.11/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover.html b/0.0.11/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.11/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.11/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.11/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.11/html_split/_0023preprocessor.html b/0.0.11/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.11/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.11/html_split/_0023references.html b/0.0.11/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.11/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.11/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.11/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.11/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.11/html_split/_0023software_002ddesign.html b/0.0.11/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.11/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.11/html_split/_0023standard_002dlibrary.html b/0.0.11/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.11/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes.html b/0.0.11/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d1.html b/0.0.11/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d2.html b/0.0.11/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d3.html b/0.0.11/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d4.html b/0.0.11/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d5.html b/0.0.11/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d6.html b/0.0.11/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d7.html b/0.0.11/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d8.html b/0.0.11/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.11/html_split/_0023student_002doutcomes_002d9.html b/0.0.11/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.11/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.11/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.11/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.11/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.11/html_split/_0023testing_002dand_002ddebugging.html b/0.0.11/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.11/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.11/html_split/_0023tooling.html b/0.0.11/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.11/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.11/html_split/_0023topic_002dintroduction.html b/0.0.11/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.11/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.11/html_split/_0023topic_002dintroduction_002d1.html b/0.0.11/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.11/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.11/html_split/_0023topic_002dintroduction_002d2.html b/0.0.11/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.11/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.11/html_split/_0023topic_002dintroduction_002d3.html b/0.0.11/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.11/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.11/html_split/_0023topic_002dintroduction_002d4.html b/0.0.11/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.11/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.11/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.11/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.11/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.11/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.11/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.11/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.11/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.11/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.11/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.11/html_split/index.html b/0.0.11/html_split/index.html new file mode 100644 index 00000000..8f486f72 --- /dev/null +++ b/0.0.11/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.11/html_split/unknown_node.html b/0.0.11/html_split/unknown_node.html new file mode 100644 index 00000000..a2cefde3 --- /dev/null +++ b/0.0.11/html_split/unknown_node.html @@ -0,0 +1,820 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.2.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. +[C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.2.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.3.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.3.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.3.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.3.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.3.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.3.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.5 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.5.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.5.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.5.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.5.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.5.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.5.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.5.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.5.3 Advanced

+ +
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.12/guidelines.epub b/0.0.12/guidelines.epub new file mode 100644 index 00000000..0abed293 Binary files /dev/null and b/0.0.12/guidelines.epub differ diff --git a/0.0.12/html/images/cpp_logo.png b/0.0.12/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.12/html/images/cpp_logo.png differ diff --git a/0.0.12/html/index.html b/0.0.12/html/index.html new file mode 100644 index 00000000..d8dd476a --- /dev/null +++ b/0.0.12/html/index.html @@ -0,0 +1,1450 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.12

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.12/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.12/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.12/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics. [Note: Can I suggest that we use the term “area” or “unit” instead of “module”? I think that these other choices are better and also avoid any potential confusion over what is meant by “module” (i.e., C++ term versus plain English term).]

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational. This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it. [Note: Isn’t this just “novice”/“beginner”?]

  • +
  • main. This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved. [Note: The term “main” is not very descriptive/helpful. Could I suggest using “intermediate”?]

  • +
  • advanced. This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.3 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.3.1 Foundational: Writing requires-expressions

+

8.3.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.3.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.3.2 Main: Advanced requirements

+

8.3.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.3.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.3.3 Advanced

+

See user-defined-literals.

+

8.4 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.4.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.4.4 Foundational: Using UDLs

+

8.4.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.4.4.4 Points to cover

+

This section lists important details for each point.

+

8.4.5 Main: implementing UDLs

+

8.4.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.5.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

8.5.4 Foundational: Using and defining functions with default arguments

+

8.5.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.5.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.5.5 Main: implementing *

+

8.5.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

8.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

8.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.5.5.4 Points to cover

+

This section lists important details for each point.

+

8.5.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

See concepts.

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.12/html_split/Advanced.html b/0.0.12/html_split/Advanced.html new file mode 100644 index 00000000..fa0e3b40 --- /dev/null +++ b/0.0.12/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.12/html_split/Background_002fRequired-Knowledge.html b/0.0.12/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..80c6ea38 --- /dev/null +++ b/0.0.12/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,64 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * +explain what an object is? [C++ +object model: objects], [C++ +object model: constant objects] * define and understand class +invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.12/html_split/Background_002fRequired-knowledge.html b/0.0.12/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..b9dcf81c --- /dev/null +++ b/0.0.12/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.5.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.12/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.12/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.12/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.12/html_split/Building.html b/0.0.12/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.12/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.12/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.12/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..e011f9fb --- /dev/null +++ b/0.0.12/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.12/html_split/Caveats.html b/0.0.12/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.12/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.12/html_split/Compilation-Model.html b/0.0.12/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.12/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.12/html_split/Compile_002dTime-Computation.html b/0.0.12/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.12/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.12/html_split/Context-and-Aim-of-This-Guide.html b/0.0.12/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.12/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.12/html_split/Contributing-to-This-Document.html b/0.0.12/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.12/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.12/html_split/Contributors.html b/0.0.12/html_split/Contributors.html new file mode 100644 index 00000000..53ba0efb --- /dev/null +++ b/0.0.12/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.12/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.12/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..6a3e986f --- /dev/null +++ b/0.0.12/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.12/html_split/Disclaimer.html b/0.0.12/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.12/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.12/html_split/Error-Handling.html b/0.0.12/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.12/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.12/html_split/Examples-of-Course-Curricula.html b/0.0.12/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.12/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.12/html_split/External-ie-Non-Standard-Libraries.html b/0.0.12/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.12/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.12/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.12/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.12/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.12/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.12/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.12/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Foundational-Using-UDLs.html b/0.0.12/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..ee31f185 --- /dev/null +++ b/0.0.12/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.12/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..99ba226c --- /dev/null +++ b/0.0.12/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.5.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.12/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.12/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..a5f60867 --- /dev/null +++ b/0.0.12/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.3.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Functions-default-argument.html b/0.0.12/html_split/Functions-default-argument.html new file mode 100644 index 00000000..7092e80b --- /dev/null +++ b/0.0.12/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.12/html_split/Functions-user_002ddefined-literals.html b/0.0.12/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..2c00dbcc --- /dev/null +++ b/0.0.12/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Functions.html b/0.0.12/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.12/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.12/html_split/Generic-Programming-Templates.html b/0.0.12/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.12/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.12/html_split/Glossary.html b/0.0.12/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.12/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.12/html_split/How-To-Contribute.html b/0.0.12/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.12/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.12/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.12/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.12/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.12/html_split/License.html b/0.0.12/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.12/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.12/html_split/Main-Advanced-requirements.html b/0.0.12/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..40d8bd0b --- /dev/null +++ b/0.0.12/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.3.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Main-Contracts-and-static_005fassert.html b/0.0.12/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.12/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.12/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.12/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Main-implementing-UDLs.html b/0.0.12/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..ae1c3075 --- /dev/null +++ b/0.0.12/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.12/html_split/Main-implementing-_002a.html b/0.0.12/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..a4ada7ba --- /dev/null +++ b/0.0.12/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.5.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.12/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.12/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..176cec8b --- /dev/null +++ b/0.0.12/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.12/html_split/Module-name-Requires-Expressions.html b/0.0.12/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..412ad99b --- /dev/null +++ b/0.0.12/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,60 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.12/html_split/Motivation.html b/0.0.12/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.12/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.12/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.12/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..923a5a2f --- /dev/null +++ b/0.0.12/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.12/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.12/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.12/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.12/html_split/Organization-of-This-Document.html b/0.0.12/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..3e489855 --- /dev/null +++ b/0.0.12/html_split/Organization-of-This-Document.html @@ -0,0 +1,101 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. [Note: Can I suggest that we use the term +“area” or “unit” instead of “module”? I think that these other +choices are better and also avoid any potential confusion over what is +meant by “module” (i.e., C++ term versus plain English term).] +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.12/html_split/Overview.html b/0.0.12/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.12/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.12/html_split/Points-to-cover.html b/0.0.12/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.12/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.12/html_split/Preprocessor.html b/0.0.12/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.12/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.12/html_split/References-on-Learning-Outcomes.html b/0.0.12/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.12/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.12/html_split/References.html b/0.0.12/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.12/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.12/html_split/Software-Design.html b/0.0.12/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.12/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.12/html_split/Standard-Library.html b/0.0.12/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.12/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.12/html_split/Student-outcomes.html b/0.0.12/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.12/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.12/html_split/Summary-of-Modules-and-Topics.html b/0.0.12/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.12/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.12/html_split/Testing-and-Debugging.html b/0.0.12/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.12/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.12/html_split/Tooling.html b/0.0.12/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.12/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.12/html_split/Topic-introduction.html b/0.0.12/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.12/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.12/html_split/Use-of-This-Document.html b/0.0.12/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.12/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.12/html_split/User_002dDefined-Types-Classes.html b/0.0.12/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.12/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.12/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.12/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.12/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.12/html_split/_0023advanced.html b/0.0.12/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.12/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.12/html_split/_0023advanced_002d1.html b/0.0.12/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.12/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.12/html_split/_0023advanced_002d2.html b/0.0.12/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.12/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.12/html_split/_0023advanced_002d3.html b/0.0.12/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.12/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0a8d35a6 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.12/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.12/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.12/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.12/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.12/html_split/_0023building.html b/0.0.12/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.12/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.12/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.12/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.12/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.12/html_split/_0023caveats.html b/0.0.12/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.12/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.12/html_split/_0023caveats_002d1.html b/0.0.12/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.12/html_split/_0023caveats_002d2.html b/0.0.12/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.12/html_split/_0023caveats_002d3.html b/0.0.12/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.12/html_split/_0023caveats_002d4.html b/0.0.12/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.12/html_split/_0023caveats_002d5.html b/0.0.12/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.12/html_split/_0023caveats_002d6.html b/0.0.12/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.12/html_split/_0023caveats_002d7.html b/0.0.12/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.12/html_split/_0023caveats_002d8.html b/0.0.12/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.12/html_split/_0023caveats_002d9.html b/0.0.12/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.12/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.12/html_split/_0023compilation_002dmodel.html b/0.0.12/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.12/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.12/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.12/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.12/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.12/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.12/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.12/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.12/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.12/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.12/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.12/html_split/_0023contributors.html b/0.0.12/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.12/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.12/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.12/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.12/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.12/html_split/_0023disclaimer.html b/0.0.12/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.12/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.12/html_split/_0023error_002dhandling.html b/0.0.12/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.12/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.12/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.12/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.12/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.12/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.12/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.12/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.12/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.12/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.12/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.12/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.12/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.12/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.12/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.12/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.12/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.12/html_split/_0023foundational_002dusing_002dudls.html b/0.0.12/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.12/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.12/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.12/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.12/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.12/html_split/_0023functions.html b/0.0.12/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.12/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.12/html_split/_0023functions_002ddefault_002dargument.html b/0.0.12/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.12/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.12/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.12/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.12/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.12/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.12/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.12/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.12/html_split/_0023glossary.html b/0.0.12/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.12/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.12/html_split/_0023how_002dto_002dcontribute.html b/0.0.12/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.12/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.12/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.12/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.12/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.12/html_split/_0023license.html b/0.0.12/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.12/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.12/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.12/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.12/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.12/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.12/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.12/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.12/html_split/_0023main_002dimplementing.html b/0.0.12/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.12/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.12/html_split/_0023main_002dimplementing_002dudls.html b/0.0.12/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.12/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.12/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.12/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.12/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.12/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.12/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.12/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.12/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.12/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.12/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.12/html_split/_0023motivation.html b/0.0.12/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.12/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.12/html_split/_0023motivation_002d1.html b/0.0.12/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.12/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.12/html_split/_0023motivation_002d2.html b/0.0.12/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.12/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.12/html_split/_0023motivation_002d3.html b/0.0.12/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.12/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.12/html_split/_0023motivation_002d4.html b/0.0.12/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.12/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.12/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.12/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.12/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.12/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.12/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.12/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.12/html_split/_0023overview.html b/0.0.12/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.12/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.12/html_split/_0023overview_002d1.html b/0.0.12/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.12/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.12/html_split/_0023overview_002d2.html b/0.0.12/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.12/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.12/html_split/_0023overview_002d3.html b/0.0.12/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.12/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.12/html_split/_0023overview_002d4.html b/0.0.12/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.12/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover.html b/0.0.12/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.12/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.12/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.12/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.12/html_split/_0023preprocessor.html b/0.0.12/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.12/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.12/html_split/_0023references.html b/0.0.12/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.12/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.12/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.12/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.12/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.12/html_split/_0023software_002ddesign.html b/0.0.12/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.12/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.12/html_split/_0023standard_002dlibrary.html b/0.0.12/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.12/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes.html b/0.0.12/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d1.html b/0.0.12/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d2.html b/0.0.12/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d3.html b/0.0.12/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d4.html b/0.0.12/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d5.html b/0.0.12/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d6.html b/0.0.12/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d7.html b/0.0.12/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d8.html b/0.0.12/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.12/html_split/_0023student_002doutcomes_002d9.html b/0.0.12/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.12/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.12/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.12/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.12/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.12/html_split/_0023testing_002dand_002ddebugging.html b/0.0.12/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.12/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.12/html_split/_0023tooling.html b/0.0.12/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.12/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.12/html_split/_0023topic_002dintroduction.html b/0.0.12/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.12/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.12/html_split/_0023topic_002dintroduction_002d1.html b/0.0.12/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.12/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.12/html_split/_0023topic_002dintroduction_002d2.html b/0.0.12/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.12/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.12/html_split/_0023topic_002dintroduction_002d3.html b/0.0.12/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.12/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.12/html_split/_0023topic_002dintroduction_002d4.html b/0.0.12/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.12/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.12/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.12/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.12/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.12/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.12/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.12/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.12/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.12/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.12/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.12/html_split/index.html b/0.0.12/html_split/index.html new file mode 100644 index 00000000..da856718 --- /dev/null +++ b/0.0.12/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.12/html_split/unknown_node.html b/0.0.12/html_split/unknown_node.html new file mode 100644 index 00000000..fa2561b3 --- /dev/null +++ b/0.0.12/html_split/unknown_node.html @@ -0,0 +1,818 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.3 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.3.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.3.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.3.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.3.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.3.3 Advanced

+

See user-defined-literals. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.4.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.4.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.4.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.4.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.5.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.5.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.5.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.5.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.5.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+

See concepts. +

+
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.13/guidelines.epub b/0.0.13/guidelines.epub new file mode 100644 index 00000000..61ad8ae1 Binary files /dev/null and b/0.0.13/guidelines.epub differ diff --git a/0.0.13/html/images/cpp_logo.png b/0.0.13/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.13/html/images/cpp_logo.png differ diff --git a/0.0.13/html/index.html b/0.0.13/html/index.html new file mode 100644 index 00000000..ea3931db --- /dev/null +++ b/0.0.13/html/index.html @@ -0,0 +1,1450 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.13

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.13/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.13/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.13/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.3 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.3.1 Foundational: Writing requires-expressions

+

8.3.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.3.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.3.2 Main: Advanced requirements

+

8.3.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.3.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.3.3 Advanced

+

See user-defined-literals.

+

8.4 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.4.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.4.4 Foundational: Using UDLs

+

8.4.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.4.4.4 Points to cover

+

This section lists important details for each point.

+

8.4.5 Main: implementing UDLs

+

8.4.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.5.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

8.5.4 Foundational: Using and defining functions with default arguments

+

8.5.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.5.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.5.5 Main: implementing *

+

8.5.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

8.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

8.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.5.5.4 Points to cover

+

This section lists important details for each point.

+

8.5.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

See concepts.

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.13/html_split/Advanced.html b/0.0.13/html_split/Advanced.html new file mode 100644 index 00000000..fa0e3b40 --- /dev/null +++ b/0.0.13/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.13/html_split/Background_002fRequired-Knowledge.html b/0.0.13/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..80c6ea38 --- /dev/null +++ b/0.0.13/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,64 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * +explain what an object is? [C++ +object model: objects], [C++ +object model: constant objects] * define and understand class +invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.13/html_split/Background_002fRequired-knowledge.html b/0.0.13/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..b9dcf81c --- /dev/null +++ b/0.0.13/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.5.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.13/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.13/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.13/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.13/html_split/Building.html b/0.0.13/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.13/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.13/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.13/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..e011f9fb --- /dev/null +++ b/0.0.13/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.13/html_split/Caveats.html b/0.0.13/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.13/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.13/html_split/Compilation-Model.html b/0.0.13/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.13/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.13/html_split/Compile_002dTime-Computation.html b/0.0.13/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.13/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.13/html_split/Context-and-Aim-of-This-Guide.html b/0.0.13/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.13/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.13/html_split/Contributing-to-This-Document.html b/0.0.13/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.13/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.13/html_split/Contributors.html b/0.0.13/html_split/Contributors.html new file mode 100644 index 00000000..53ba0efb --- /dev/null +++ b/0.0.13/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.13/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.13/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..6a3e986f --- /dev/null +++ b/0.0.13/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.13/html_split/Disclaimer.html b/0.0.13/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.13/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.13/html_split/Error-Handling.html b/0.0.13/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.13/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.13/html_split/Examples-of-Course-Curricula.html b/0.0.13/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.13/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.13/html_split/External-ie-Non-Standard-Libraries.html b/0.0.13/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.13/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.13/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.13/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.13/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.13/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.13/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.13/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Foundational-Using-UDLs.html b/0.0.13/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..ee31f185 --- /dev/null +++ b/0.0.13/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.13/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..99ba226c --- /dev/null +++ b/0.0.13/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.5.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.13/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.13/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..a5f60867 --- /dev/null +++ b/0.0.13/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.3.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Functions-default-argument.html b/0.0.13/html_split/Functions-default-argument.html new file mode 100644 index 00000000..7092e80b --- /dev/null +++ b/0.0.13/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.13/html_split/Functions-user_002ddefined-literals.html b/0.0.13/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..2c00dbcc --- /dev/null +++ b/0.0.13/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Functions.html b/0.0.13/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.13/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.13/html_split/Generic-Programming-Templates.html b/0.0.13/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.13/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.13/html_split/Glossary.html b/0.0.13/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.13/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.13/html_split/How-To-Contribute.html b/0.0.13/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.13/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.13/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.13/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.13/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.13/html_split/License.html b/0.0.13/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.13/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.13/html_split/Main-Advanced-requirements.html b/0.0.13/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..40d8bd0b --- /dev/null +++ b/0.0.13/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.3.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Main-Contracts-and-static_005fassert.html b/0.0.13/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.13/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.13/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.13/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Main-implementing-UDLs.html b/0.0.13/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..ae1c3075 --- /dev/null +++ b/0.0.13/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.13/html_split/Main-implementing-_002a.html b/0.0.13/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..a4ada7ba --- /dev/null +++ b/0.0.13/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.5.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.13/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.13/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..176cec8b --- /dev/null +++ b/0.0.13/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.13/html_split/Module-name-Requires-Expressions.html b/0.0.13/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..412ad99b --- /dev/null +++ b/0.0.13/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,60 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.13/html_split/Motivation.html b/0.0.13/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.13/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.13/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.13/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..8c4cacd7 --- /dev/null +++ b/0.0.13/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.13/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.13/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.13/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.13/html_split/Organization-of-This-Document.html b/0.0.13/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..ece5d7a1 --- /dev/null +++ b/0.0.13/html_split/Organization-of-This-Document.html @@ -0,0 +1,95 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.13/html_split/Overview.html b/0.0.13/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.13/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.13/html_split/Points-to-cover.html b/0.0.13/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.13/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.13/html_split/Preprocessor.html b/0.0.13/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.13/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.13/html_split/References-on-Learning-Outcomes.html b/0.0.13/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.13/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.13/html_split/References.html b/0.0.13/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.13/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.13/html_split/Software-Design.html b/0.0.13/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.13/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.13/html_split/Standard-Library.html b/0.0.13/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.13/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.13/html_split/Student-outcomes.html b/0.0.13/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.13/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.13/html_split/Summary-of-Modules-and-Topics.html b/0.0.13/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.13/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.13/html_split/Testing-and-Debugging.html b/0.0.13/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.13/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.13/html_split/Tooling.html b/0.0.13/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.13/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.13/html_split/Topic-introduction.html b/0.0.13/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.13/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.13/html_split/Use-of-This-Document.html b/0.0.13/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.13/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.13/html_split/User_002dDefined-Types-Classes.html b/0.0.13/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.13/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.13/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.13/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.13/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.13/html_split/_0023advanced.html b/0.0.13/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.13/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.13/html_split/_0023advanced_002d1.html b/0.0.13/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.13/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.13/html_split/_0023advanced_002d2.html b/0.0.13/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.13/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.13/html_split/_0023advanced_002d3.html b/0.0.13/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.13/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0a8d35a6 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.13/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.13/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.13/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.13/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.13/html_split/_0023building.html b/0.0.13/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.13/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.13/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.13/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.13/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.13/html_split/_0023caveats.html b/0.0.13/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.13/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.13/html_split/_0023caveats_002d1.html b/0.0.13/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.13/html_split/_0023caveats_002d2.html b/0.0.13/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.13/html_split/_0023caveats_002d3.html b/0.0.13/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.13/html_split/_0023caveats_002d4.html b/0.0.13/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.13/html_split/_0023caveats_002d5.html b/0.0.13/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.13/html_split/_0023caveats_002d6.html b/0.0.13/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.13/html_split/_0023caveats_002d7.html b/0.0.13/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.13/html_split/_0023caveats_002d8.html b/0.0.13/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.13/html_split/_0023caveats_002d9.html b/0.0.13/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.13/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.13/html_split/_0023compilation_002dmodel.html b/0.0.13/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.13/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.13/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.13/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.13/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.13/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.13/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.13/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.13/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.13/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.13/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.13/html_split/_0023contributors.html b/0.0.13/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.13/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.13/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.13/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.13/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.13/html_split/_0023disclaimer.html b/0.0.13/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.13/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.13/html_split/_0023error_002dhandling.html b/0.0.13/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.13/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.13/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.13/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.13/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.13/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.13/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.13/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.13/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.13/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.13/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.13/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.13/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.13/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.13/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.13/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.13/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.13/html_split/_0023foundational_002dusing_002dudls.html b/0.0.13/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.13/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.13/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.13/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.13/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.13/html_split/_0023functions.html b/0.0.13/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.13/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.13/html_split/_0023functions_002ddefault_002dargument.html b/0.0.13/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.13/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.13/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.13/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.13/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.13/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.13/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.13/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.13/html_split/_0023glossary.html b/0.0.13/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.13/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.13/html_split/_0023how_002dto_002dcontribute.html b/0.0.13/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.13/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.13/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.13/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.13/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.13/html_split/_0023license.html b/0.0.13/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.13/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.13/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.13/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.13/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.13/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.13/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.13/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.13/html_split/_0023main_002dimplementing.html b/0.0.13/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.13/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.13/html_split/_0023main_002dimplementing_002dudls.html b/0.0.13/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.13/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.13/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.13/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.13/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.13/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.13/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.13/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.13/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.13/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.13/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.13/html_split/_0023motivation.html b/0.0.13/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.13/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.13/html_split/_0023motivation_002d1.html b/0.0.13/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.13/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.13/html_split/_0023motivation_002d2.html b/0.0.13/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.13/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.13/html_split/_0023motivation_002d3.html b/0.0.13/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.13/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.13/html_split/_0023motivation_002d4.html b/0.0.13/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.13/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.13/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.13/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.13/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.13/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.13/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.13/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.13/html_split/_0023overview.html b/0.0.13/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.13/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.13/html_split/_0023overview_002d1.html b/0.0.13/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.13/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.13/html_split/_0023overview_002d2.html b/0.0.13/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.13/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.13/html_split/_0023overview_002d3.html b/0.0.13/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.13/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.13/html_split/_0023overview_002d4.html b/0.0.13/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.13/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover.html b/0.0.13/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.13/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.13/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.13/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.13/html_split/_0023preprocessor.html b/0.0.13/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.13/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.13/html_split/_0023references.html b/0.0.13/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.13/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.13/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.13/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.13/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.13/html_split/_0023software_002ddesign.html b/0.0.13/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.13/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.13/html_split/_0023standard_002dlibrary.html b/0.0.13/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.13/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes.html b/0.0.13/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d1.html b/0.0.13/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d2.html b/0.0.13/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d3.html b/0.0.13/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d4.html b/0.0.13/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d5.html b/0.0.13/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d6.html b/0.0.13/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d7.html b/0.0.13/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d8.html b/0.0.13/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.13/html_split/_0023student_002doutcomes_002d9.html b/0.0.13/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.13/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.13/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.13/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.13/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.13/html_split/_0023testing_002dand_002ddebugging.html b/0.0.13/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.13/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.13/html_split/_0023tooling.html b/0.0.13/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.13/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.13/html_split/_0023topic_002dintroduction.html b/0.0.13/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.13/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.13/html_split/_0023topic_002dintroduction_002d1.html b/0.0.13/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.13/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.13/html_split/_0023topic_002dintroduction_002d2.html b/0.0.13/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.13/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.13/html_split/_0023topic_002dintroduction_002d3.html b/0.0.13/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.13/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.13/html_split/_0023topic_002dintroduction_002d4.html b/0.0.13/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.13/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.13/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.13/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.13/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.13/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.13/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.13/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.13/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.13/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.13/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.13/html_split/index.html b/0.0.13/html_split/index.html new file mode 100644 index 00000000..da856718 --- /dev/null +++ b/0.0.13/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.13/html_split/unknown_node.html b/0.0.13/html_split/unknown_node.html new file mode 100644 index 00000000..fa2561b3 --- /dev/null +++ b/0.0.13/html_split/unknown_node.html @@ -0,0 +1,818 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.3 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.3.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.3.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.3.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.3.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.3.3 Advanced

+

See user-defined-literals. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.4.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.4.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.4.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.4.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.5.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.5.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.5.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.5.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.5.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+

See concepts. +

+
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.14/guidelines.epub b/0.0.14/guidelines.epub new file mode 100644 index 00000000..cc359063 Binary files /dev/null and b/0.0.14/guidelines.epub differ diff --git a/0.0.14/html/images/cpp_logo.png b/0.0.14/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.14/html/images/cpp_logo.png differ diff --git a/0.0.14/html/index.html b/0.0.14/html/index.html new file mode 100644 index 00000000..a59fb2ec --- /dev/null +++ b/0.0.14/html/index.html @@ -0,0 +1,1449 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.14

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.14/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.14/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.14/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.3 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.3.1 Foundational: Writing requires-expressions

+

8.3.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.3.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.3.2 Main: Advanced requirements

+

8.3.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.3.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.3.3 Advanced

+

See user-defined-literals.

+

8.4 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.4.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.4.4 Foundational: Using UDLs

+

8.4.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.4.4.4 Points to cover

+

This section lists important details for each point.

+

8.4.5 Main: implementing UDLs

+

8.4.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.5.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

8.5.4 Foundational: Using and defining functions with default arguments

+

8.5.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.5.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.5.5 Main: implementing *

+

8.5.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

8.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

8.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.5.5.4 Points to cover

+

This section lists important details for each point.

+

8.5.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

See concepts.

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.14/html_split/Advanced.html b/0.0.14/html_split/Advanced.html new file mode 100644 index 00000000..fa0e3b40 --- /dev/null +++ b/0.0.14/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.14/html_split/Background_002fRequired-Knowledge.html b/0.0.14/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..80c6ea38 --- /dev/null +++ b/0.0.14/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,64 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * +explain what an object is? [C++ +object model: objects], [C++ +object model: constant objects] * define and understand class +invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.14/html_split/Background_002fRequired-knowledge.html b/0.0.14/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..b9dcf81c --- /dev/null +++ b/0.0.14/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.5.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.14/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.14/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.14/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.14/html_split/Building.html b/0.0.14/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.14/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.14/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.14/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..e011f9fb --- /dev/null +++ b/0.0.14/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.14/html_split/Caveats.html b/0.0.14/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.14/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.14/html_split/Compilation-Model.html b/0.0.14/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.14/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.14/html_split/Compile_002dTime-Computation.html b/0.0.14/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.14/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.14/html_split/Context-and-Aim-of-This-Guide.html b/0.0.14/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.14/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.14/html_split/Contributing-to-This-Document.html b/0.0.14/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.14/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.14/html_split/Contributors.html b/0.0.14/html_split/Contributors.html new file mode 100644 index 00000000..53ba0efb --- /dev/null +++ b/0.0.14/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.14/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.14/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..6a3e986f --- /dev/null +++ b/0.0.14/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.14/html_split/Disclaimer.html b/0.0.14/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.14/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.14/html_split/Error-Handling.html b/0.0.14/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.14/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.14/html_split/Examples-of-Course-Curricula.html b/0.0.14/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.14/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.14/html_split/External-ie-Non-Standard-Libraries.html b/0.0.14/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.14/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.14/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.14/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.14/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.14/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.14/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.14/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Foundational-Using-UDLs.html b/0.0.14/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..ee31f185 --- /dev/null +++ b/0.0.14/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.14/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..99ba226c --- /dev/null +++ b/0.0.14/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.5.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.14/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.14/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..a5f60867 --- /dev/null +++ b/0.0.14/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.3.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Functions-default-argument.html b/0.0.14/html_split/Functions-default-argument.html new file mode 100644 index 00000000..7092e80b --- /dev/null +++ b/0.0.14/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.14/html_split/Functions-user_002ddefined-literals.html b/0.0.14/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..2c00dbcc --- /dev/null +++ b/0.0.14/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Functions.html b/0.0.14/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.14/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.14/html_split/Generic-Programming-Templates.html b/0.0.14/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.14/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.14/html_split/Glossary.html b/0.0.14/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.14/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.14/html_split/How-To-Contribute.html b/0.0.14/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.14/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.14/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.14/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.14/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.14/html_split/License.html b/0.0.14/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.14/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.14/html_split/Main-Advanced-requirements.html b/0.0.14/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..40d8bd0b --- /dev/null +++ b/0.0.14/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.3.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Main-Contracts-and-static_005fassert.html b/0.0.14/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.14/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.14/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.14/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Main-implementing-UDLs.html b/0.0.14/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..ae1c3075 --- /dev/null +++ b/0.0.14/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.14/html_split/Main-implementing-_002a.html b/0.0.14/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..a4ada7ba --- /dev/null +++ b/0.0.14/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.5.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.14/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.14/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..176cec8b --- /dev/null +++ b/0.0.14/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.14/html_split/Module-name-Requires-Expressions.html b/0.0.14/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..412ad99b --- /dev/null +++ b/0.0.14/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,60 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.14/html_split/Motivation.html b/0.0.14/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.14/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.14/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.14/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..a91aa9d2 --- /dev/null +++ b/0.0.14/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.14/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.14/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.14/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.14/html_split/Organization-of-This-Document.html b/0.0.14/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..ece5d7a1 --- /dev/null +++ b/0.0.14/html_split/Organization-of-This-Document.html @@ -0,0 +1,95 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.14/html_split/Overview.html b/0.0.14/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.14/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.14/html_split/Points-to-cover.html b/0.0.14/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.14/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.14/html_split/Preprocessor.html b/0.0.14/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.14/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.14/html_split/References-on-Learning-Outcomes.html b/0.0.14/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.14/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.14/html_split/References.html b/0.0.14/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.14/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.14/html_split/Software-Design.html b/0.0.14/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.14/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.14/html_split/Standard-Library.html b/0.0.14/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.14/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.14/html_split/Student-outcomes.html b/0.0.14/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.14/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.14/html_split/Summary-of-Modules-and-Topics.html b/0.0.14/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..678c3180 --- /dev/null +++ b/0.0.14/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,100 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.14/html_split/Testing-and-Debugging.html b/0.0.14/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.14/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.14/html_split/Tooling.html b/0.0.14/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.14/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.14/html_split/Topic-introduction.html b/0.0.14/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.14/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.14/html_split/Use-of-This-Document.html b/0.0.14/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.14/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.14/html_split/User_002dDefined-Types-Classes.html b/0.0.14/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.14/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.14/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.14/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.14/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.14/html_split/_0023advanced.html b/0.0.14/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.14/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.14/html_split/_0023advanced_002d1.html b/0.0.14/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.14/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.14/html_split/_0023advanced_002d2.html b/0.0.14/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.14/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.14/html_split/_0023advanced_002d3.html b/0.0.14/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.14/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0a8d35a6 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.14/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.14/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.14/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.14/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.14/html_split/_0023building.html b/0.0.14/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.14/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.14/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.14/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.14/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.14/html_split/_0023caveats.html b/0.0.14/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.14/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.14/html_split/_0023caveats_002d1.html b/0.0.14/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.14/html_split/_0023caveats_002d2.html b/0.0.14/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.14/html_split/_0023caveats_002d3.html b/0.0.14/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.14/html_split/_0023caveats_002d4.html b/0.0.14/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.14/html_split/_0023caveats_002d5.html b/0.0.14/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.14/html_split/_0023caveats_002d6.html b/0.0.14/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.14/html_split/_0023caveats_002d7.html b/0.0.14/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.14/html_split/_0023caveats_002d8.html b/0.0.14/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.14/html_split/_0023caveats_002d9.html b/0.0.14/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.14/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.14/html_split/_0023compilation_002dmodel.html b/0.0.14/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.14/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.14/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.14/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.14/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.14/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.14/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.14/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.14/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.14/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.14/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.14/html_split/_0023contributors.html b/0.0.14/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.14/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.14/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.14/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.14/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.14/html_split/_0023disclaimer.html b/0.0.14/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.14/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.14/html_split/_0023error_002dhandling.html b/0.0.14/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.14/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.14/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.14/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.14/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.14/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.14/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.14/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.14/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.14/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.14/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.14/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.14/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.14/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.14/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.14/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.14/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.14/html_split/_0023foundational_002dusing_002dudls.html b/0.0.14/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.14/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.14/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.14/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.14/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.14/html_split/_0023functions.html b/0.0.14/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.14/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.14/html_split/_0023functions_002ddefault_002dargument.html b/0.0.14/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.14/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.14/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.14/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.14/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.14/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.14/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.14/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.14/html_split/_0023glossary.html b/0.0.14/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.14/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.14/html_split/_0023how_002dto_002dcontribute.html b/0.0.14/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.14/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.14/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.14/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.14/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.14/html_split/_0023license.html b/0.0.14/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.14/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.14/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.14/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.14/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.14/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.14/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.14/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.14/html_split/_0023main_002dimplementing.html b/0.0.14/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.14/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.14/html_split/_0023main_002dimplementing_002dudls.html b/0.0.14/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.14/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.14/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.14/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.14/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.14/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.14/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.14/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.14/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.14/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.14/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.14/html_split/_0023motivation.html b/0.0.14/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.14/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.14/html_split/_0023motivation_002d1.html b/0.0.14/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.14/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.14/html_split/_0023motivation_002d2.html b/0.0.14/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.14/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.14/html_split/_0023motivation_002d3.html b/0.0.14/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.14/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.14/html_split/_0023motivation_002d4.html b/0.0.14/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.14/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.14/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.14/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.14/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.14/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.14/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.14/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.14/html_split/_0023overview.html b/0.0.14/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.14/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.14/html_split/_0023overview_002d1.html b/0.0.14/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.14/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.14/html_split/_0023overview_002d2.html b/0.0.14/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.14/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.14/html_split/_0023overview_002d3.html b/0.0.14/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.14/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.14/html_split/_0023overview_002d4.html b/0.0.14/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.14/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover.html b/0.0.14/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.14/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.14/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.14/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.14/html_split/_0023preprocessor.html b/0.0.14/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.14/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.14/html_split/_0023references.html b/0.0.14/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.14/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.14/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.14/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.14/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.14/html_split/_0023software_002ddesign.html b/0.0.14/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.14/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.14/html_split/_0023standard_002dlibrary.html b/0.0.14/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.14/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes.html b/0.0.14/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d1.html b/0.0.14/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d2.html b/0.0.14/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d3.html b/0.0.14/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d4.html b/0.0.14/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d5.html b/0.0.14/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d6.html b/0.0.14/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d7.html b/0.0.14/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d8.html b/0.0.14/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.14/html_split/_0023student_002doutcomes_002d9.html b/0.0.14/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.14/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.14/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.14/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.14/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.14/html_split/_0023testing_002dand_002ddebugging.html b/0.0.14/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.14/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.14/html_split/_0023tooling.html b/0.0.14/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.14/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.14/html_split/_0023topic_002dintroduction.html b/0.0.14/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.14/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.14/html_split/_0023topic_002dintroduction_002d1.html b/0.0.14/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.14/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.14/html_split/_0023topic_002dintroduction_002d2.html b/0.0.14/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.14/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.14/html_split/_0023topic_002dintroduction_002d3.html b/0.0.14/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.14/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.14/html_split/_0023topic_002dintroduction_002d4.html b/0.0.14/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.14/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.14/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.14/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.14/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.14/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.14/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.14/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.14/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.14/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.14/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.14/html_split/index.html b/0.0.14/html_split/index.html new file mode 100644 index 00000000..da856718 --- /dev/null +++ b/0.0.14/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.14/html_split/unknown_node.html b/0.0.14/html_split/unknown_node.html new file mode 100644 index 00000000..fa2561b3 --- /dev/null +++ b/0.0.14/html_split/unknown_node.html @@ -0,0 +1,818 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.3 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.3.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.3.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.3.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.3.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.3.3 Advanced

+

See user-defined-literals. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.4.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.4.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.4.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.4.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.5.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.5.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.5.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.5.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.5.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+

See concepts. +

+
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.16/guidelines.epub b/0.0.16/guidelines.epub new file mode 100644 index 00000000..a09fed05 Binary files /dev/null and b/0.0.16/guidelines.epub differ diff --git a/0.0.16/html/images/cpp_logo.png b/0.0.16/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.16/html/images/cpp_logo.png differ diff --git a/0.0.16/html/index.html b/0.0.16/html/index.html new file mode 100644 index 00000000..d0fe1438 --- /dev/null +++ b/0.0.16/html/index.html @@ -0,0 +1,1443 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.16

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.16/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.16/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.16/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

7.1.4 Foundational: How and when are copies made

+

7.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

7.1.5 Main: Implementing user-defined copy operations

+

7.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

7.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

7.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

7.3 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

7.3.1 Foundational: Writing requires-expressions

+

7.3.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

7.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

7.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

7.3.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

7.3.2 Main: Advanced requirements

+

7.3.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

7.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

7.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.3.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

7.3.3 Advanced

+

7.4 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

7.4.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

7.4.4 Foundational: Calling static_assert with a constant expression

+

7.4.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

7.4.5 Main: Contracts and static_assert

+

7.4.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

7.4.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

See concepts.

+

7.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.5.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.5.4 Foundational: Using and defining functions with default arguments

+

7.5.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.5.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.5.5 Main: implementing *

+

7.5.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.5.5.4 Points to cover

+

This section lists important details for each point.

+

7.5.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

7.6 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.6.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.6.4 Foundational: Using UDLs

+

7.6.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.6.4.4 Points to cover

+

This section lists important details for each point.

+

7.6.5 Main: implementing UDLs

+

7.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

See user-defined-literals.

+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

9 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

11 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

12 References

+

12.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.16/html_split/Advanced.html b/0.0.16/html_split/Advanced.html new file mode 100644 index 00000000..23c357cb --- /dev/null +++ b/0.0.16/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.16/html_split/Background_002fRequired-Knowledge.html b/0.0.16/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..a07e680f --- /dev/null +++ b/0.0.16/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,63 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * explain what +an object is? [C++ object model: +objects], [C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.16/html_split/Background_002fRequired-knowledge.html b/0.0.16/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..cc56cd73 --- /dev/null +++ b/0.0.16/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.5.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.16/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.16/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..81f5e062 --- /dev/null +++ b/0.0.16/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.16/html_split/Building.html b/0.0.16/html_split/Building.html new file mode 100644 index 00000000..a50a84a0 --- /dev/null +++ b/0.0.16/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.16/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.16/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..a57b947b --- /dev/null +++ b/0.0.16/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.16/html_split/Caveats.html b/0.0.16/html_split/Caveats.html new file mode 100644 index 00000000..a3ad88c6 --- /dev/null +++ b/0.0.16/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.16/html_split/Compilation-Model.html b/0.0.16/html_split/Compilation-Model.html new file mode 100644 index 00000000..41802d4a --- /dev/null +++ b/0.0.16/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.16/html_split/Compile_002dTime-Computation.html b/0.0.16/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..4e9e67d1 --- /dev/null +++ b/0.0.16/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.16/html_split/Context-and-Aim-of-This-Guide.html b/0.0.16/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..57fb0592 --- /dev/null +++ b/0.0.16/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.16/html_split/Contributing-to-This-Document.html b/0.0.16/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..2faa7724 --- /dev/null +++ b/0.0.16/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.16/html_split/Contributors.html b/0.0.16/html_split/Contributors.html new file mode 100644 index 00000000..5531c928 --- /dev/null +++ b/0.0.16/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

9 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.16/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.16/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..fc95dfad --- /dev/null +++ b/0.0.16/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

7 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.16/html_split/Error-Handling.html b/0.0.16/html_split/Error-Handling.html new file mode 100644 index 00000000..1260ebe2 --- /dev/null +++ b/0.0.16/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.16/html_split/External-ie-Non-Standard-Libraries.html b/0.0.16/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..0b3c0fa4 --- /dev/null +++ b/0.0.16/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.16/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.16/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..0919c625 --- /dev/null +++ b/0.0.16/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.16/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.16/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..a3e9be7a --- /dev/null +++ b/0.0.16/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Foundational-Using-UDLs.html b/0.0.16/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..84fb1098 --- /dev/null +++ b/0.0.16/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.16/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..edab680f --- /dev/null +++ b/0.0.16/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.16/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.16/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..ab09ef42 --- /dev/null +++ b/0.0.16/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.3.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Functions-default-argument.html b/0.0.16/html_split/Functions-default-argument.html new file mode 100644 index 00000000..8ecca35d --- /dev/null +++ b/0.0.16/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.16/html_split/Functions-user_002ddefined-literals.html b/0.0.16/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..2631a718 --- /dev/null +++ b/0.0.16/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Functions.html b/0.0.16/html_split/Functions.html new file mode 100644 index 00000000..8e3d484c --- /dev/null +++ b/0.0.16/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.16/html_split/Generic-Programming-Templates.html b/0.0.16/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..3ed32f58 --- /dev/null +++ b/0.0.16/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.16/html_split/Glossary.html b/0.0.16/html_split/Glossary.html new file mode 100644 index 00000000..99ff3571 --- /dev/null +++ b/0.0.16/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.16/html_split/How-To-Contribute.html b/0.0.16/html_split/How-To-Contribute.html new file mode 100644 index 00000000..91b73c92 --- /dev/null +++ b/0.0.16/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.16/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.16/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1454f019 --- /dev/null +++ b/0.0.16/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.16/html_split/License.html b/0.0.16/html_split/License.html new file mode 100644 index 00000000..5835f48a --- /dev/null +++ b/0.0.16/html_split/License.html @@ -0,0 +1,99 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+ + + + + + diff --git a/0.0.16/html_split/Main-Advanced-requirements.html b/0.0.16/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..c117bb0b --- /dev/null +++ b/0.0.16/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.3.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Main-Contracts-and-static_005fassert.html b/0.0.16/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..b0d6e8d9 --- /dev/null +++ b/0.0.16/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.16/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..3f51dae9 --- /dev/null +++ b/0.0.16/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Main-implementing-UDLs.html b/0.0.16/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..6357f968 --- /dev/null +++ b/0.0.16/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.16/html_split/Main-implementing-_002a.html b/0.0.16/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..abec4e44 --- /dev/null +++ b/0.0.16/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.5.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.16/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.16/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..96041bf3 --- /dev/null +++ b/0.0.16/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.16/html_split/Module-name-Requires-Expressions.html b/0.0.16/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..2e8a05c7 --- /dev/null +++ b/0.0.16/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,60 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.16/html_split/Motivation.html b/0.0.16/html_split/Motivation.html new file mode 100644 index 00000000..e1693392 --- /dev/null +++ b/0.0.16/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.16/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.16/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..17ee667c --- /dev/null +++ b/0.0.16/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.16/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.16/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.16/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.16/html_split/Organization-of-This-Document.html b/0.0.16/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..37c73dba --- /dev/null +++ b/0.0.16/html_split/Organization-of-This-Document.html @@ -0,0 +1,95 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.16/html_split/Overview.html b/0.0.16/html_split/Overview.html new file mode 100644 index 00000000..2f320add --- /dev/null +++ b/0.0.16/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.16/html_split/Points-to-cover.html b/0.0.16/html_split/Points-to-cover.html new file mode 100644 index 00000000..44440755 --- /dev/null +++ b/0.0.16/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.16/html_split/Preprocessor.html b/0.0.16/html_split/Preprocessor.html new file mode 100644 index 00000000..b20bf653 --- /dev/null +++ b/0.0.16/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.16/html_split/References-on-Learning-Outcomes.html b/0.0.16/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..edf49930 --- /dev/null +++ b/0.0.16/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

12.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.16/html_split/References.html b/0.0.16/html_split/References.html new file mode 100644 index 00000000..8484d341 --- /dev/null +++ b/0.0.16/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

12 References

+ + + + + + + + + + + diff --git a/0.0.16/html_split/Software-Design.html b/0.0.16/html_split/Software-Design.html new file mode 100644 index 00000000..dbd34b62 --- /dev/null +++ b/0.0.16/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.16/html_split/Standard-Library.html b/0.0.16/html_split/Standard-Library.html new file mode 100644 index 00000000..0d173a45 --- /dev/null +++ b/0.0.16/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.16/html_split/Student-outcomes.html b/0.0.16/html_split/Student-outcomes.html new file mode 100644 index 00000000..1d53b492 --- /dev/null +++ b/0.0.16/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.16/html_split/Summary-of-Modules-and-Topics.html b/0.0.16/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..33358df9 --- /dev/null +++ b/0.0.16/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,100 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.16/html_split/Testing-and-Debugging.html b/0.0.16/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..497707a7 --- /dev/null +++ b/0.0.16/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

6.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.16/html_split/Tooling.html b/0.0.16/html_split/Tooling.html new file mode 100644 index 00000000..e479ed29 --- /dev/null +++ b/0.0.16/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.16/html_split/Topic-introduction.html b/0.0.16/html_split/Topic-introduction.html new file mode 100644 index 00000000..c011ddf8 --- /dev/null +++ b/0.0.16/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.16/html_split/Use-of-This-Document.html b/0.0.16/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..dedcdd3d --- /dev/null +++ b/0.0.16/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.16/html_split/User_002dDefined-Types-Classes.html b/0.0.16/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..d7acd5e8 --- /dev/null +++ b/0.0.16/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.16/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.16/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..c5a1bfbe --- /dev/null +++ b/0.0.16/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

12.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.16/html_split/_0023advanced.html b/0.0.16/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.16/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.16/html_split/_0023advanced_002d1.html b/0.0.16/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.16/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.16/html_split/_0023advanced_002d2.html b/0.0.16/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.16/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.16/html_split/_0023advanced_002d3.html b/0.0.16/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.16/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0a8d35a6 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.16/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.16/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.16/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.16/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.16/html_split/_0023building.html b/0.0.16/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.16/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.16/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.16/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.16/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.16/html_split/_0023caveats.html b/0.0.16/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.16/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.16/html_split/_0023caveats_002d1.html b/0.0.16/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.16/html_split/_0023caveats_002d2.html b/0.0.16/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.16/html_split/_0023caveats_002d3.html b/0.0.16/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.16/html_split/_0023caveats_002d4.html b/0.0.16/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.16/html_split/_0023caveats_002d5.html b/0.0.16/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.16/html_split/_0023caveats_002d6.html b/0.0.16/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.16/html_split/_0023caveats_002d7.html b/0.0.16/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.16/html_split/_0023caveats_002d8.html b/0.0.16/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.16/html_split/_0023caveats_002d9.html b/0.0.16/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.16/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.16/html_split/_0023compilation_002dmodel.html b/0.0.16/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.16/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.16/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.16/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.16/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.16/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.16/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.16/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.16/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.16/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.16/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.16/html_split/_0023contributors.html b/0.0.16/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.16/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.16/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.16/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.16/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.16/html_split/_0023error_002dhandling.html b/0.0.16/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.16/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.16/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.16/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.16/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.16/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.16/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.16/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.16/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.16/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.16/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.16/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.16/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.16/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.16/html_split/_0023foundational_002dusing_002dudls.html b/0.0.16/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.16/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.16/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.16/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.16/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.16/html_split/_0023functions.html b/0.0.16/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.16/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.16/html_split/_0023functions_002ddefault_002dargument.html b/0.0.16/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.16/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.16/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.16/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.16/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.16/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.16/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.16/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.16/html_split/_0023glossary.html b/0.0.16/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.16/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.16/html_split/_0023how_002dto_002dcontribute.html b/0.0.16/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.16/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.16/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.16/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.16/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.16/html_split/_0023license.html b/0.0.16/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.16/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.16/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.16/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.16/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.16/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.16/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.16/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.16/html_split/_0023main_002dimplementing.html b/0.0.16/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.16/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.16/html_split/_0023main_002dimplementing_002dudls.html b/0.0.16/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.16/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.16/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.16/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.16/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.16/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.16/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.16/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.16/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.16/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.16/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.16/html_split/_0023motivation.html b/0.0.16/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.16/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.16/html_split/_0023motivation_002d1.html b/0.0.16/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.16/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.16/html_split/_0023motivation_002d2.html b/0.0.16/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.16/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.16/html_split/_0023motivation_002d3.html b/0.0.16/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.16/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.16/html_split/_0023motivation_002d4.html b/0.0.16/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.16/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.16/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.16/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.16/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.16/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.16/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.16/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.16/html_split/_0023overview.html b/0.0.16/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.16/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.16/html_split/_0023overview_002d1.html b/0.0.16/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.16/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.16/html_split/_0023overview_002d2.html b/0.0.16/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.16/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.16/html_split/_0023overview_002d3.html b/0.0.16/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.16/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.16/html_split/_0023overview_002d4.html b/0.0.16/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.16/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover.html b/0.0.16/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.16/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.16/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.16/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.16/html_split/_0023preprocessor.html b/0.0.16/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.16/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.16/html_split/_0023references.html b/0.0.16/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.16/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.16/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.16/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.16/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.16/html_split/_0023software_002ddesign.html b/0.0.16/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.16/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.16/html_split/_0023standard_002dlibrary.html b/0.0.16/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.16/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes.html b/0.0.16/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d1.html b/0.0.16/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d2.html b/0.0.16/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d3.html b/0.0.16/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d4.html b/0.0.16/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d5.html b/0.0.16/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d6.html b/0.0.16/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d7.html b/0.0.16/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d8.html b/0.0.16/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.16/html_split/_0023student_002doutcomes_002d9.html b/0.0.16/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.16/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.16/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.16/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.16/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.16/html_split/_0023testing_002dand_002ddebugging.html b/0.0.16/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.16/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.16/html_split/_0023tooling.html b/0.0.16/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.16/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.16/html_split/_0023topic_002dintroduction.html b/0.0.16/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.16/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.16/html_split/_0023topic_002dintroduction_002d1.html b/0.0.16/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.16/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.16/html_split/_0023topic_002dintroduction_002d2.html b/0.0.16/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.16/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.16/html_split/_0023topic_002dintroduction_002d3.html b/0.0.16/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.16/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.16/html_split/_0023topic_002dintroduction_002d4.html b/0.0.16/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.16/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.16/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.16/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.16/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.16/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.16/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.16/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.16/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.16/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.16/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.16/html_split/index.html b/0.0.16/html_split/index.html new file mode 100644 index 00000000..0e30552f --- /dev/null +++ b/0.0.16/html_split/index.html @@ -0,0 +1,234 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.16/html_split/unknown_node.html b/0.0.16/html_split/unknown_node.html new file mode 100644 index 00000000..f73b5664 --- /dev/null +++ b/0.0.16/html_split/unknown_node.html @@ -0,0 +1,817 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

7.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: concepts] +

+
+

+   [Contents]

+
+

7.3 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

7.3.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

7.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

7.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

7.3.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.3.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

7.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.3.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

7.3.3 Advanced

+ +
+

+   [Contents]

+
+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

7.4.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

7.4.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.4.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.4.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.4.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

See concepts. +

+
+

+   [Contents]

+
+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

7.5.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

7.5.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.5.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.5.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.5.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.6.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

7.6.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+

+   [Contents]

+
+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.6.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

See user-defined-literals. +

+ + + + + diff --git a/0.0.17/guidelines.epub b/0.0.17/guidelines.epub new file mode 100644 index 00000000..5439fad9 Binary files /dev/null and b/0.0.17/guidelines.epub differ diff --git a/0.0.17/html/images/cpp_logo.png b/0.0.17/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.17/html/images/cpp_logo.png differ diff --git a/0.0.17/html/index.html b/0.0.17/html/index.html new file mode 100644 index 00000000..c1fd816d --- /dev/null +++ b/0.0.17/html/index.html @@ -0,0 +1,1443 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.17

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.17/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.17/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.17/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

7.1.4 Foundational: Calling static_assert with a constant expression

+

7.1.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

7.1.5 Main: Contracts and static_assert

+

7.1.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

7.3 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

7.3.1 Foundational: Writing requires-expressions

+

7.3.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

7.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

7.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

7.3.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

7.3.2 Main: Advanced requirements

+

7.3.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

7.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

7.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.3.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

7.3.3 Advanced

+

7.4 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

7.4.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

7.4.4 Foundational: How and when are copies made

+

7.4.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

7.4.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

7.4.5 Main: Implementing user-defined copy operations

+

7.4.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

7.4.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

See user-defined-literals.

+

7.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.5.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.5.4 Foundational: Using and defining functions with default arguments

+

7.5.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.5.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.5.5 Main: implementing *

+

7.5.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.5.5.4 Points to cover

+

This section lists important details for each point.

+

7.5.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

7.6 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.6.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.6.4 Foundational: Using UDLs

+

7.6.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.6.4.4 Points to cover

+

This section lists important details for each point.

+

7.6.5 Main: implementing UDLs

+

7.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

See concepts.

+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

9 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

11 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

12 References

+

12.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.17/html_split/Advanced.html b/0.0.17/html_split/Advanced.html new file mode 100644 index 00000000..26a02e1e --- /dev/null +++ b/0.0.17/html_split/Advanced.html @@ -0,0 +1,54 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.17/html_split/Background_002fRequired-Knowledge.html b/0.0.17/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..6e7a2b0e --- /dev/null +++ b/0.0.17/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,60 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.1 Background/Required Knowledge

+

A student: +

+ + + + + + + diff --git a/0.0.17/html_split/Background_002fRequired-knowledge.html b/0.0.17/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..cc56cd73 --- /dev/null +++ b/0.0.17/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.5.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.17/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.17/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..81f5e062 --- /dev/null +++ b/0.0.17/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.17/html_split/Building.html b/0.0.17/html_split/Building.html new file mode 100644 index 00000000..a50a84a0 --- /dev/null +++ b/0.0.17/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.17/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.17/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..1240fc6e --- /dev/null +++ b/0.0.17/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,67 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.17/html_split/Caveats.html b/0.0.17/html_split/Caveats.html new file mode 100644 index 00000000..4b774438 --- /dev/null +++ b/0.0.17/html_split/Caveats.html @@ -0,0 +1,55 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + diff --git a/0.0.17/html_split/Compilation-Model.html b/0.0.17/html_split/Compilation-Model.html new file mode 100644 index 00000000..41802d4a --- /dev/null +++ b/0.0.17/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.17/html_split/Compile_002dTime-Computation.html b/0.0.17/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..4e9e67d1 --- /dev/null +++ b/0.0.17/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.17/html_split/Context-and-Aim-of-This-Guide.html b/0.0.17/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..57fb0592 --- /dev/null +++ b/0.0.17/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.17/html_split/Contributing-to-This-Document.html b/0.0.17/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..2faa7724 --- /dev/null +++ b/0.0.17/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.17/html_split/Contributors.html b/0.0.17/html_split/Contributors.html new file mode 100644 index 00000000..5531c928 --- /dev/null +++ b/0.0.17/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

9 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.17/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.17/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..5ad51179 --- /dev/null +++ b/0.0.17/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

7 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.17/html_split/Error-Handling.html b/0.0.17/html_split/Error-Handling.html new file mode 100644 index 00000000..1260ebe2 --- /dev/null +++ b/0.0.17/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.17/html_split/External-ie-Non-Standard-Libraries.html b/0.0.17/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..0b3c0fa4 --- /dev/null +++ b/0.0.17/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.17/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.17/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..d041d33a --- /dev/null +++ b/0.0.17/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,64 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.17/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.17/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..aef5cf09 --- /dev/null +++ b/0.0.17/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,61 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Foundational-Using-UDLs.html b/0.0.17/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..84fb1098 --- /dev/null +++ b/0.0.17/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.17/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..edab680f --- /dev/null +++ b/0.0.17/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.17/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.17/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..ab09ef42 --- /dev/null +++ b/0.0.17/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.3.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Functions-default-argument.html b/0.0.17/html_split/Functions-default-argument.html new file mode 100644 index 00000000..0cb1c250 --- /dev/null +++ b/0.0.17/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.17/html_split/Functions-user_002ddefined-literals.html b/0.0.17/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..2631a718 --- /dev/null +++ b/0.0.17/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Functions.html b/0.0.17/html_split/Functions.html new file mode 100644 index 00000000..8e3d484c --- /dev/null +++ b/0.0.17/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.17/html_split/Generic-Programming-Templates.html b/0.0.17/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..3ed32f58 --- /dev/null +++ b/0.0.17/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.17/html_split/Glossary.html b/0.0.17/html_split/Glossary.html new file mode 100644 index 00000000..99ff3571 --- /dev/null +++ b/0.0.17/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.17/html_split/How-To-Contribute.html b/0.0.17/html_split/How-To-Contribute.html new file mode 100644 index 00000000..91b73c92 --- /dev/null +++ b/0.0.17/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.17/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.17/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1454f019 --- /dev/null +++ b/0.0.17/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.17/html_split/License.html b/0.0.17/html_split/License.html new file mode 100644 index 00000000..5835f48a --- /dev/null +++ b/0.0.17/html_split/License.html @@ -0,0 +1,99 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+ + + + + + diff --git a/0.0.17/html_split/Main-Advanced-requirements.html b/0.0.17/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..c117bb0b --- /dev/null +++ b/0.0.17/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.3.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Main-Contracts-and-static_005fassert.html b/0.0.17/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..a094a0d7 --- /dev/null +++ b/0.0.17/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,62 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.17/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..73d8c038 --- /dev/null +++ b/0.0.17/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,61 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Main-implementing-UDLs.html b/0.0.17/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..6357f968 --- /dev/null +++ b/0.0.17/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.17/html_split/Main-implementing-_002a.html b/0.0.17/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..abec4e44 --- /dev/null +++ b/0.0.17/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.5.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.17/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.17/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..9c610af7 --- /dev/null +++ b/0.0.17/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,69 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.17/html_split/Module-name-Requires-Expressions.html b/0.0.17/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..0a8db197 --- /dev/null +++ b/0.0.17/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,60 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.2 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.17/html_split/Motivation.html b/0.0.17/html_split/Motivation.html new file mode 100644 index 00000000..48010a17 --- /dev/null +++ b/0.0.17/html_split/Motivation.html @@ -0,0 +1,60 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+ + + + + diff --git a/0.0.17/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.17/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..e72d2224 --- /dev/null +++ b/0.0.17/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.17/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.17/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.17/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.17/html_split/Organization-of-This-Document.html b/0.0.17/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..37c73dba --- /dev/null +++ b/0.0.17/html_split/Organization-of-This-Document.html @@ -0,0 +1,95 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.17/html_split/Overview.html b/0.0.17/html_split/Overview.html new file mode 100644 index 00000000..205f6dc9 --- /dev/null +++ b/0.0.17/html_split/Overview.html @@ -0,0 +1,62 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ + + + + + diff --git a/0.0.17/html_split/Points-to-cover.html b/0.0.17/html_split/Points-to-cover.html new file mode 100644 index 00000000..e15ebf72 --- /dev/null +++ b/0.0.17/html_split/Points-to-cover.html @@ -0,0 +1,59 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.17/html_split/Preprocessor.html b/0.0.17/html_split/Preprocessor.html new file mode 100644 index 00000000..b20bf653 --- /dev/null +++ b/0.0.17/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.17/html_split/References-on-Learning-Outcomes.html b/0.0.17/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..edf49930 --- /dev/null +++ b/0.0.17/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

12.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.17/html_split/References.html b/0.0.17/html_split/References.html new file mode 100644 index 00000000..8484d341 --- /dev/null +++ b/0.0.17/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

12 References

+ + + + + + + + + + + diff --git a/0.0.17/html_split/Software-Design.html b/0.0.17/html_split/Software-Design.html new file mode 100644 index 00000000..dbd34b62 --- /dev/null +++ b/0.0.17/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.17/html_split/Standard-Library.html b/0.0.17/html_split/Standard-Library.html new file mode 100644 index 00000000..0d173a45 --- /dev/null +++ b/0.0.17/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.17/html_split/Student-outcomes.html b/0.0.17/html_split/Student-outcomes.html new file mode 100644 index 00000000..a06cf3af --- /dev/null +++ b/0.0.17/html_split/Student-outcomes.html @@ -0,0 +1,61 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ + + + + + diff --git a/0.0.17/html_split/Summary-of-Modules-and-Topics.html b/0.0.17/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..33358df9 --- /dev/null +++ b/0.0.17/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,100 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.17/html_split/Testing-and-Debugging.html b/0.0.17/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..497707a7 --- /dev/null +++ b/0.0.17/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

6.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.17/html_split/Tooling.html b/0.0.17/html_split/Tooling.html new file mode 100644 index 00000000..e479ed29 --- /dev/null +++ b/0.0.17/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.17/html_split/Topic-introduction.html b/0.0.17/html_split/Topic-introduction.html new file mode 100644 index 00000000..ba000333 --- /dev/null +++ b/0.0.17/html_split/Topic-introduction.html @@ -0,0 +1,57 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+ + + + + diff --git a/0.0.17/html_split/Use-of-This-Document.html b/0.0.17/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..dedcdd3d --- /dev/null +++ b/0.0.17/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.17/html_split/User_002dDefined-Types-Classes.html b/0.0.17/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..d7acd5e8 --- /dev/null +++ b/0.0.17/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.17/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.17/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..c5a1bfbe --- /dev/null +++ b/0.0.17/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

12.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.17/html_split/_0023advanced.html b/0.0.17/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.17/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.17/html_split/_0023advanced_002d1.html b/0.0.17/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.17/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.17/html_split/_0023advanced_002d2.html b/0.0.17/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.17/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.17/html_split/_0023advanced_002d3.html b/0.0.17/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.17/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0a8d35a6 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.17/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.17/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.17/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.17/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.17/html_split/_0023building.html b/0.0.17/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.17/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.17/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.17/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.17/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.17/html_split/_0023caveats.html b/0.0.17/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.17/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.17/html_split/_0023caveats_002d1.html b/0.0.17/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.17/html_split/_0023caveats_002d2.html b/0.0.17/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.17/html_split/_0023caveats_002d3.html b/0.0.17/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.17/html_split/_0023caveats_002d4.html b/0.0.17/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.17/html_split/_0023caveats_002d5.html b/0.0.17/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.17/html_split/_0023caveats_002d6.html b/0.0.17/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.17/html_split/_0023caveats_002d7.html b/0.0.17/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.17/html_split/_0023caveats_002d8.html b/0.0.17/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.17/html_split/_0023caveats_002d9.html b/0.0.17/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.17/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.17/html_split/_0023compilation_002dmodel.html b/0.0.17/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.17/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.17/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.17/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.17/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.17/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.17/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.17/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.17/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.17/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.17/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.17/html_split/_0023contributors.html b/0.0.17/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.17/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.17/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.17/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.17/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.17/html_split/_0023error_002dhandling.html b/0.0.17/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.17/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.17/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.17/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.17/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.17/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.17/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.17/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.17/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.17/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.17/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.17/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.17/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.17/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.17/html_split/_0023foundational_002dusing_002dudls.html b/0.0.17/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.17/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.17/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.17/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.17/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.17/html_split/_0023functions.html b/0.0.17/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.17/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.17/html_split/_0023functions_002ddefault_002dargument.html b/0.0.17/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.17/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.17/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.17/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.17/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.17/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.17/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.17/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.17/html_split/_0023glossary.html b/0.0.17/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.17/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.17/html_split/_0023how_002dto_002dcontribute.html b/0.0.17/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.17/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.17/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.17/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.17/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.17/html_split/_0023license.html b/0.0.17/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.17/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.17/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.17/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.17/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.17/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.17/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.17/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.17/html_split/_0023main_002dimplementing.html b/0.0.17/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.17/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.17/html_split/_0023main_002dimplementing_002dudls.html b/0.0.17/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.17/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.17/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.17/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.17/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.17/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.17/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.17/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.17/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.17/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.17/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.17/html_split/_0023motivation.html b/0.0.17/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.17/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.17/html_split/_0023motivation_002d1.html b/0.0.17/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.17/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.17/html_split/_0023motivation_002d2.html b/0.0.17/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.17/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.17/html_split/_0023motivation_002d3.html b/0.0.17/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.17/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.17/html_split/_0023motivation_002d4.html b/0.0.17/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.17/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.17/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.17/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.17/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.17/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.17/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.17/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.17/html_split/_0023overview.html b/0.0.17/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.17/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.17/html_split/_0023overview_002d1.html b/0.0.17/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.17/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.17/html_split/_0023overview_002d2.html b/0.0.17/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.17/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.17/html_split/_0023overview_002d3.html b/0.0.17/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.17/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.17/html_split/_0023overview_002d4.html b/0.0.17/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.17/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover.html b/0.0.17/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.17/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.17/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.17/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.17/html_split/_0023preprocessor.html b/0.0.17/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.17/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.17/html_split/_0023references.html b/0.0.17/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.17/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.17/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.17/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.17/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.17/html_split/_0023software_002ddesign.html b/0.0.17/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.17/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.17/html_split/_0023standard_002dlibrary.html b/0.0.17/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.17/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes.html b/0.0.17/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d1.html b/0.0.17/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d2.html b/0.0.17/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d3.html b/0.0.17/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d4.html b/0.0.17/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d5.html b/0.0.17/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d6.html b/0.0.17/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d7.html b/0.0.17/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d8.html b/0.0.17/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.17/html_split/_0023student_002doutcomes_002d9.html b/0.0.17/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.17/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.17/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.17/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.17/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.17/html_split/_0023testing_002dand_002ddebugging.html b/0.0.17/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.17/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.17/html_split/_0023tooling.html b/0.0.17/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.17/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.17/html_split/_0023topic_002dintroduction.html b/0.0.17/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.17/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.17/html_split/_0023topic_002dintroduction_002d1.html b/0.0.17/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.17/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.17/html_split/_0023topic_002dintroduction_002d2.html b/0.0.17/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.17/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.17/html_split/_0023topic_002dintroduction_002d3.html b/0.0.17/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.17/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.17/html_split/_0023topic_002dintroduction_002d4.html b/0.0.17/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.17/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.17/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.17/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.17/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.17/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.17/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.17/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.17/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.17/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.17/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.17/html_split/index.html b/0.0.17/html_split/index.html new file mode 100644 index 00000000..08c20ea6 --- /dev/null +++ b/0.0.17/html_split/index.html @@ -0,0 +1,234 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.17/html_split/unknown_node.html b/0.0.17/html_split/unknown_node.html new file mode 100644 index 00000000..b40c0838 --- /dev/null +++ b/0.0.17/html_split/unknown_node.html @@ -0,0 +1,849 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

7.1.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: concepts] +

+
+

+   [Contents]

+
+

7.3 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

7.3.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

7.3.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

7.3.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

7.3.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.3.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.3.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

7.3.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.3.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

7.3.3 Advanced

+ +
+

+   [Contents]

+
+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ +
+

+   [Contents]

+
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+
+

+   [Contents]

+
+

7.4.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+
+

+   [Contents]

+
+

7.4.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * explain what +an object is? [C++ object model: +objects], [C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+
+

+   [Contents]

+
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+
+

+   [Contents]

+
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.4.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.4.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.4.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+

See user-defined-literals. +

+
+

+   [Contents]

+
+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

7.5.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

7.5.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.5.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.5.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.5.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.6.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

7.6.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+

+   [Contents]

+
+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.6.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

See concepts. +

+ + + + + diff --git a/0.0.18/guidelines.epub b/0.0.18/guidelines.epub new file mode 100644 index 00000000..6a77fe1f Binary files /dev/null and b/0.0.18/guidelines.epub differ diff --git a/0.0.18/html/images/cpp_logo.png b/0.0.18/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.18/html/images/cpp_logo.png differ diff --git a/0.0.18/html/index.html b/0.0.18/html/index.html new file mode 100644 index 00000000..1cffdbfd --- /dev/null +++ b/0.0.18/html/index.html @@ -0,0 +1,1652 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.18

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.18/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.18/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.18/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations???
[def]Definitions✔️✔️✔️
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

7.1.4 Foundational: How and when are copies made

+

7.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

7.1.5 Main: Implementing user-defined copy operations

+

7.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

7.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

7.2 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • A definition is a declaration that supplies all that is needed for a complete entity
  • +
  • int baz = 42;
  • +
  • void bar() { /* implementation */ }
  • +
  • class Foo { /* class body */ };
  • +
+

7.2.3 Topic introduction

+

Very brief introduction to the topic.

+

A definition extends a declaration, providing all that is needed for a complete entity, e.g., allocate memory for variables, provide the implementation for functions, complete definitions of data and function members of a class.

+

7.2.4 Foundational: Defining variables and ODR

+

7.2.4.1 Background/Required Knowledge

+

A student:

+ +

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. define a variable with a specific type int baz = 42;
  2. +
  3. define a function void bar() {}
  4. +
  5. define a class class Foo {};
  6. +
  7. explain the one definition rule
  8. +
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.2.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • One definition rule (ODR)
  • +
+

7.2.5 Main: Defining for programs

+

7.2.5.1 Background/Required Knowledge

+ +

7.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. organize variables, functions, classes into multiple translation units, describing interface with declarations and providing the implementations with definitions without violating ODR.
  2. +
  3. distinguish between template declaration and definition
  4. +
+

7.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Putting a definition into a header file that is included more than once leads to ODR violations, possibly resulting in linker errors.
  • +
+

7.2.5.4 Points to cover

+

This section lists important details for each point.

+

7.2.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • ABI Incompatibilities: Different definitions of the same type in multiple object files can lead to subtle program errors.
  • +
+

7.3 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Introduces a name and it’s type
  • +
  • int baz;
  • +
  • void bar();
  • +
  • class Foo;
  • +
+

7.3.3 Topic introduction

+

Very brief introduction to the topic.

+

Introduce names and their associated type in a scope.

+

7.3.4 Foundational: Declaring variables

+

7.3.4.1 Background/Required Knowledge

+

A student:

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type)
    • +
    • int (Integer type)
    • +
    • double (Floating-point type)
    • +
  • +
+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. declare a variable with a specific type ‘int baz;’
  2. +
  3. declare a function ‘void bar();’
  4. +
  5. declare a class ‘class Foo;’
  6. +
  7. forward declare a user-defined type or a function
  8. +
  9. explain the difference between a definition and a declaration
  10. +
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.3.4.4 Points to cover

+

This section lists important details for each point.

+

7.3.5 Main: Declarations for programs

+

7.3.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Basic template syntax
  • +
+

7.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. create header and source files with a declaration in the former and definition of a variable/function in the latter
  2. +
  3. declare type aliases to introduce a type with an alternative name ‘using std::string;’
  4. +
  5. write a forward template declaration
  6. +
+

7.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Declaring aliases can introduce name clashes
  • +
  • Prefer using declaration’s over using directives in header files [link]
  • +
  • The order of declarations dictates the order of initialization
  • +
+

7.3.5.4 Points to cover

+

This section lists important details for each point.

+

7.3.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • asm declaration
  • +
  • using-enum-declaration
  • +
  • extern “C” declarations
  • +
+

See concepts.

+

See user-defined-literals.

+

7.4 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

7.4.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

7.4.4 Foundational: Calling static_assert with a constant expression

+

7.4.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

7.4.5 Main: Contracts and static_assert

+

7.4.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

7.4.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.5 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.5.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.5.4 Foundational: Using UDLs

+

7.5.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.5.4.4 Points to cover

+

This section lists important details for each point.

+

7.5.5 Main: implementing UDLs

+

7.5.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.6.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.6.4 Foundational: Using and defining functions with default arguments

+

7.6.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.6.5 Main: implementing *

+

7.6.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.6.5.4 Points to cover

+

This section lists important details for each point.

+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

7.7 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

7.8 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

7.8.1 Foundational: Writing requires-expressions

+

7.8.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

7.8.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

7.8.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

7.8.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

7.8.2 Main: Advanced requirements

+

7.8.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

7.8.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

7.8.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.8.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

7.8.3 Advanced

+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

9 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

11 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

12 References

+

12.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.18/html_split/Advanced-Special-cases-and-peculiarities.html b/0.0.18/html_split/Advanced-Special-cases-and-peculiarities.html new file mode 100644 index 00000000..10f0a59e --- /dev/null +++ b/0.0.18/html_split/Advanced-Special-cases-and-peculiarities.html @@ -0,0 +1,59 @@ + + + + + +Advanced Special cases and peculiarities (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.2.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + + + diff --git a/0.0.18/html_split/Advanced.html b/0.0.18/html_split/Advanced.html new file mode 100644 index 00000000..c507130f --- /dev/null +++ b/0.0.18/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.18/html_split/Background_002fRequired-Knowledge.html b/0.0.18/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..0a041415 --- /dev/null +++ b/0.0.18/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,65 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] +* explain what an object is? +[C++ object +model: objects], +[C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.18/html_split/Background_002fRequired-knowledge.html b/0.0.18/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..d6a71986 --- /dev/null +++ b/0.0.18/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.6.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.18/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.18/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..7b78e969 --- /dev/null +++ b/0.0.18/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,61 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations???
[‘def’]Definitions‘✔️’‘✔️’‘✔️’
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.18/html_split/Building.html b/0.0.18/html_split/Building.html new file mode 100644 index 00000000..a50a84a0 --- /dev/null +++ b/0.0.18/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.18/html_split/C_002b_002b-object-model-Declarations.html b/0.0.18/html_split/C_002b_002b-object-model-Declarations.html new file mode 100644 index 00000000..bba29b88 --- /dev/null +++ b/0.0.18/html_split/C_002b_002b-object-model-Declarations.html @@ -0,0 +1,68 @@ + + + + + +C++ object model Declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.3 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.18/html_split/C_002b_002b-object-model-Definitions.html b/0.0.18/html_split/C_002b_002b-object-model-Definitions.html new file mode 100644 index 00000000..f9c6074c --- /dev/null +++ b/0.0.18/html_split/C_002b_002b-object-model-Definitions.html @@ -0,0 +1,68 @@ + + + + + +C++ object model Definitions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.2 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.18/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.18/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..56b717b0 --- /dev/null +++ b/0.0.18/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.18/html_split/Caveats.html b/0.0.18/html_split/Caveats.html new file mode 100644 index 00000000..a3ad88c6 --- /dev/null +++ b/0.0.18/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.18/html_split/Compilation-Model.html b/0.0.18/html_split/Compilation-Model.html new file mode 100644 index 00000000..41802d4a --- /dev/null +++ b/0.0.18/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.18/html_split/Compile_002dTime-Computation.html b/0.0.18/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..4e9e67d1 --- /dev/null +++ b/0.0.18/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.18/html_split/Context-and-Aim-of-This-Guide.html b/0.0.18/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..57fb0592 --- /dev/null +++ b/0.0.18/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.18/html_split/Contributing-to-This-Document.html b/0.0.18/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..2faa7724 --- /dev/null +++ b/0.0.18/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.18/html_split/Contributors.html b/0.0.18/html_split/Contributors.html new file mode 100644 index 00000000..5531c928 --- /dev/null +++ b/0.0.18/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

9 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.18/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.18/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..1cf649a5 --- /dev/null +++ b/0.0.18/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,71 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

7 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + + + diff --git a/0.0.18/html_split/Error-Handling.html b/0.0.18/html_split/Error-Handling.html new file mode 100644 index 00000000..1260ebe2 --- /dev/null +++ b/0.0.18/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.18/html_split/External-ie-Non-Standard-Libraries.html b/0.0.18/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..0b3c0fa4 --- /dev/null +++ b/0.0.18/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.18/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.18/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..0919c625 --- /dev/null +++ b/0.0.18/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.18/html_split/Foundational-Declaring-variables.html b/0.0.18/html_split/Foundational-Declaring-variables.html new file mode 100644 index 00000000..a7c99a50 --- /dev/null +++ b/0.0.18/html_split/Foundational-Declaring-variables.html @@ -0,0 +1,61 @@ + + + + + +Foundational Declaring variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.3.4 Foundational: Declaring variables

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Foundational-Defining-variables-and-ODR.html b/0.0.18/html_split/Foundational-Defining-variables-and-ODR.html new file mode 100644 index 00000000..95b361de --- /dev/null +++ b/0.0.18/html_split/Foundational-Defining-variables-and-ODR.html @@ -0,0 +1,61 @@ + + + + + +Foundational Defining variables and ODR (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.2.4 Foundational: Defining variables and ODR

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.18/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..a3e9be7a --- /dev/null +++ b/0.0.18/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Foundational-Using-UDLs.html b/0.0.18/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..17a22a20 --- /dev/null +++ b/0.0.18/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.18/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..67194e27 --- /dev/null +++ b/0.0.18/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.18/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.18/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..5808e0df --- /dev/null +++ b/0.0.18/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.8.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Functions-default-argument.html b/0.0.18/html_split/Functions-default-argument.html new file mode 100644 index 00000000..d16ab751 --- /dev/null +++ b/0.0.18/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.18/html_split/Functions-user_002ddefined-literals.html b/0.0.18/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..ad41e1f1 --- /dev/null +++ b/0.0.18/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Functions.html b/0.0.18/html_split/Functions.html new file mode 100644 index 00000000..8e3d484c --- /dev/null +++ b/0.0.18/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.18/html_split/Generic-Programming-Templates.html b/0.0.18/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..3ed32f58 --- /dev/null +++ b/0.0.18/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.18/html_split/Glossary.html b/0.0.18/html_split/Glossary.html new file mode 100644 index 00000000..99ff3571 --- /dev/null +++ b/0.0.18/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.18/html_split/How-To-Contribute.html b/0.0.18/html_split/How-To-Contribute.html new file mode 100644 index 00000000..91b73c92 --- /dev/null +++ b/0.0.18/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.18/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.18/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1454f019 --- /dev/null +++ b/0.0.18/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.18/html_split/License.html b/0.0.18/html_split/License.html new file mode 100644 index 00000000..5835f48a --- /dev/null +++ b/0.0.18/html_split/License.html @@ -0,0 +1,99 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+ + + + + + diff --git a/0.0.18/html_split/Main-Advanced-requirements.html b/0.0.18/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..16433ad6 --- /dev/null +++ b/0.0.18/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.8.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Main-Contracts-and-static_005fassert.html b/0.0.18/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..b0d6e8d9 --- /dev/null +++ b/0.0.18/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Main-Declarations-for-programs.html b/0.0.18/html_split/Main-Declarations-for-programs.html new file mode 100644 index 00000000..9b7d307b --- /dev/null +++ b/0.0.18/html_split/Main-Declarations-for-programs.html @@ -0,0 +1,61 @@ + + + + + +Main Declarations for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.3.5 Main: Declarations for programs

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Main-Defining-for-programs.html b/0.0.18/html_split/Main-Defining-for-programs.html new file mode 100644 index 00000000..87edef42 --- /dev/null +++ b/0.0.18/html_split/Main-Defining-for-programs.html @@ -0,0 +1,61 @@ + + + + + +Main Defining for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.2.5 Main: Defining for programs

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.18/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..3f51dae9 --- /dev/null +++ b/0.0.18/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Main-implementing-UDLs.html b/0.0.18/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..cfcca9a6 --- /dev/null +++ b/0.0.18/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.18/html_split/Main-implementing-_002a.html b/0.0.18/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..d0b510bb --- /dev/null +++ b/0.0.18/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.6.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.18/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.18/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..011ef71d --- /dev/null +++ b/0.0.18/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.18/html_split/Module-name-Requires-Expressions.html b/0.0.18/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..bb32c763 --- /dev/null +++ b/0.0.18/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.7 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.18/html_split/Motivation.html b/0.0.18/html_split/Motivation.html new file mode 100644 index 00000000..e1693392 --- /dev/null +++ b/0.0.18/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.18/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.18/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..a28209da --- /dev/null +++ b/0.0.18/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.18/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.18/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.18/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.18/html_split/Organization-of-This-Document.html b/0.0.18/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..37c73dba --- /dev/null +++ b/0.0.18/html_split/Organization-of-This-Document.html @@ -0,0 +1,95 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.18/html_split/Overview.html b/0.0.18/html_split/Overview.html new file mode 100644 index 00000000..2f320add --- /dev/null +++ b/0.0.18/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.18/html_split/Points-to-cover.html b/0.0.18/html_split/Points-to-cover.html new file mode 100644 index 00000000..44440755 --- /dev/null +++ b/0.0.18/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.18/html_split/Preprocessor.html b/0.0.18/html_split/Preprocessor.html new file mode 100644 index 00000000..b20bf653 --- /dev/null +++ b/0.0.18/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.18/html_split/References-on-Learning-Outcomes.html b/0.0.18/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..edf49930 --- /dev/null +++ b/0.0.18/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

12.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.18/html_split/References.html b/0.0.18/html_split/References.html new file mode 100644 index 00000000..8484d341 --- /dev/null +++ b/0.0.18/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

12 References

+ + + + + + + + + + + diff --git a/0.0.18/html_split/Software-Design.html b/0.0.18/html_split/Software-Design.html new file mode 100644 index 00000000..dbd34b62 --- /dev/null +++ b/0.0.18/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.18/html_split/Standard-Library.html b/0.0.18/html_split/Standard-Library.html new file mode 100644 index 00000000..0d173a45 --- /dev/null +++ b/0.0.18/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.18/html_split/Student-outcomes.html b/0.0.18/html_split/Student-outcomes.html new file mode 100644 index 00000000..1d53b492 --- /dev/null +++ b/0.0.18/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.18/html_split/Summary-of-Modules-and-Topics.html b/0.0.18/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..33358df9 --- /dev/null +++ b/0.0.18/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,100 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.18/html_split/Testing-and-Debugging.html b/0.0.18/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..497707a7 --- /dev/null +++ b/0.0.18/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

6.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.18/html_split/Tooling.html b/0.0.18/html_split/Tooling.html new file mode 100644 index 00000000..e479ed29 --- /dev/null +++ b/0.0.18/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.18/html_split/Topic-introduction.html b/0.0.18/html_split/Topic-introduction.html new file mode 100644 index 00000000..c011ddf8 --- /dev/null +++ b/0.0.18/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.18/html_split/Use-of-This-Document.html b/0.0.18/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..dedcdd3d --- /dev/null +++ b/0.0.18/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.18/html_split/User_002dDefined-Types-Classes.html b/0.0.18/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..d7acd5e8 --- /dev/null +++ b/0.0.18/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.18/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.18/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..c5a1bfbe --- /dev/null +++ b/0.0.18/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

12.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.18/html_split/_0023advanced.html b/0.0.18/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.18/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.18/html_split/_0023advanced_002d1.html b/0.0.18/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.18/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.18/html_split/_0023advanced_002d2.html b/0.0.18/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.18/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.18/html_split/_0023advanced_002d3.html b/0.0.18/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.18/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.18/html_split/_0023advanced_002d4.html b/0.0.18/html_split/_0023advanced_002d4.html new file mode 100644 index 00000000..a320ab5d --- /dev/null +++ b/0.0.18/html_split/_0023advanced_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-4.

+ diff --git a/0.0.18/html_split/_0023advanced_002dspecial_002dcases_002dand_002dpeculiarities.html b/0.0.18/html_split/_0023advanced_002dspecial_002dcases_002dand_002dpeculiarities.html new file mode 100644 index 00000000..db94ba06 --- /dev/null +++ b/0.0.18/html_split/_0023advanced_002dspecial_002dcases_002dand_002dpeculiarities.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-special-cases-and-peculiarities (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-special-cases-and-peculiarities.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d10.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d10.html new file mode 100644 index 00000000..eb0e4401 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-10.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d11.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d11.html new file mode 100644 index 00000000..6977882b --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-11.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d12.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d12.html new file mode 100644 index 00000000..7729c323 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-12.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d13.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d13.html new file mode 100644 index 00000000..039c0d3d --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-13.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.18/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.18/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.18/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.18/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.18/html_split/_0023building.html b/0.0.18/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.18/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.18/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.18/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.18/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.18/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html b/0.0.18/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html new file mode 100644 index 00000000..fe710a9f --- /dev/null +++ b/0.0.18/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-declarations.

+ diff --git a/0.0.18/html_split/_0023c_002dobject_002dmodel_002ddefinitions.html b/0.0.18/html_split/_0023c_002dobject_002dmodel_002ddefinitions.html new file mode 100644 index 00000000..b76a8b17 --- /dev/null +++ b/0.0.18/html_split/_0023c_002dobject_002dmodel_002ddefinitions.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-definitions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-definitions.

+ diff --git a/0.0.18/html_split/_0023caveats.html b/0.0.18/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.18/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.18/html_split/_0023caveats_002d1.html b/0.0.18/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.18/html_split/_0023caveats_002d10.html b/0.0.18/html_split/_0023caveats_002d10.html new file mode 100644 index 00000000..da12422d --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-10.

+ diff --git a/0.0.18/html_split/_0023caveats_002d11.html b/0.0.18/html_split/_0023caveats_002d11.html new file mode 100644 index 00000000..6e2bb589 --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-11.

+ diff --git a/0.0.18/html_split/_0023caveats_002d12.html b/0.0.18/html_split/_0023caveats_002d12.html new file mode 100644 index 00000000..5badafbf --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-12.

+ diff --git a/0.0.18/html_split/_0023caveats_002d13.html b/0.0.18/html_split/_0023caveats_002d13.html new file mode 100644 index 00000000..e42da0cd --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-13.

+ diff --git a/0.0.18/html_split/_0023caveats_002d2.html b/0.0.18/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.18/html_split/_0023caveats_002d3.html b/0.0.18/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.18/html_split/_0023caveats_002d4.html b/0.0.18/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.18/html_split/_0023caveats_002d5.html b/0.0.18/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.18/html_split/_0023caveats_002d6.html b/0.0.18/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.18/html_split/_0023caveats_002d7.html b/0.0.18/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.18/html_split/_0023caveats_002d8.html b/0.0.18/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.18/html_split/_0023caveats_002d9.html b/0.0.18/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.18/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.18/html_split/_0023compilation_002dmodel.html b/0.0.18/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.18/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.18/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.18/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.18/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.18/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.18/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.18/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.18/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.18/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.18/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.18/html_split/_0023contributors.html b/0.0.18/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.18/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.18/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.18/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.18/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.18/html_split/_0023error_002dhandling.html b/0.0.18/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.18/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.18/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.18/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.18/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.18/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.18/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.18/html_split/_0023foundational_002ddeclaring_002dvariables.html b/0.0.18/html_split/_0023foundational_002ddeclaring_002dvariables.html new file mode 100644 index 00000000..63bc7edc --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002ddeclaring_002dvariables.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-declaring-variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-declaring-variables.

+ diff --git a/0.0.18/html_split/_0023foundational_002ddefining_002dvariables_002dand_002dodr.html b/0.0.18/html_split/_0023foundational_002ddefining_002dvariables_002dand_002dodr.html new file mode 100644 index 00000000..2f9e1a76 --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002ddefining_002dvariables_002dand_002dodr.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-defining-variables-and-odr (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-defining-variables-and-odr.

+ diff --git a/0.0.18/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.18/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.18/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.18/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.18/html_split/_0023foundational_002dusing_002dudls.html b/0.0.18/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.18/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.18/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.18/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.18/html_split/_0023functions.html b/0.0.18/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.18/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.18/html_split/_0023functions_002ddefault_002dargument.html b/0.0.18/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.18/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.18/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.18/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.18/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.18/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.18/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.18/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.18/html_split/_0023glossary.html b/0.0.18/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.18/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.18/html_split/_0023how_002dto_002dcontribute.html b/0.0.18/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.18/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.18/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.18/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.18/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.18/html_split/_0023license.html b/0.0.18/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.18/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.18/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.18/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.18/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.18/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.18/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.18/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.18/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html b/0.0.18/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html new file mode 100644 index 00000000..f64b1119 --- /dev/null +++ b/0.0.18/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html @@ -0,0 +1,40 @@ + + + + + + +#main-declarations-for-programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-declarations-for-programs.

+ diff --git a/0.0.18/html_split/_0023main_002ddefining_002dfor_002dprograms.html b/0.0.18/html_split/_0023main_002ddefining_002dfor_002dprograms.html new file mode 100644 index 00000000..543487e2 --- /dev/null +++ b/0.0.18/html_split/_0023main_002ddefining_002dfor_002dprograms.html @@ -0,0 +1,40 @@ + + + + + + +#main-defining-for-programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-defining-for-programs.

+ diff --git a/0.0.18/html_split/_0023main_002dimplementing.html b/0.0.18/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.18/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.18/html_split/_0023main_002dimplementing_002dudls.html b/0.0.18/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.18/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.18/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.18/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.18/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.18/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.18/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.18/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.18/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.18/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.18/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.18/html_split/_0023motivation.html b/0.0.18/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.18/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.18/html_split/_0023motivation_002d1.html b/0.0.18/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.18/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.18/html_split/_0023motivation_002d2.html b/0.0.18/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.18/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.18/html_split/_0023motivation_002d3.html b/0.0.18/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.18/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.18/html_split/_0023motivation_002d4.html b/0.0.18/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.18/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.18/html_split/_0023motivation_002d5.html b/0.0.18/html_split/_0023motivation_002d5.html new file mode 100644 index 00000000..e177cbf4 --- /dev/null +++ b/0.0.18/html_split/_0023motivation_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-5.

+ diff --git a/0.0.18/html_split/_0023motivation_002d6.html b/0.0.18/html_split/_0023motivation_002d6.html new file mode 100644 index 00000000..84378470 --- /dev/null +++ b/0.0.18/html_split/_0023motivation_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-6.

+ diff --git a/0.0.18/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.18/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.18/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.18/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.18/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.18/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.18/html_split/_0023overview.html b/0.0.18/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.18/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.18/html_split/_0023overview_002d1.html b/0.0.18/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.18/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.18/html_split/_0023overview_002d2.html b/0.0.18/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.18/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.18/html_split/_0023overview_002d3.html b/0.0.18/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.18/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.18/html_split/_0023overview_002d4.html b/0.0.18/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.18/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.18/html_split/_0023overview_002d5.html b/0.0.18/html_split/_0023overview_002d5.html new file mode 100644 index 00000000..173ebf32 --- /dev/null +++ b/0.0.18/html_split/_0023overview_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#overview-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-5.

+ diff --git a/0.0.18/html_split/_0023overview_002d6.html b/0.0.18/html_split/_0023overview_002d6.html new file mode 100644 index 00000000..9c8c2476 --- /dev/null +++ b/0.0.18/html_split/_0023overview_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#overview-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-6.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover.html b/0.0.18/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d10.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d10.html new file mode 100644 index 00000000..dc428507 --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-10.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d11.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d11.html new file mode 100644 index 00000000..15ba774d --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-11.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d12.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d12.html new file mode 100644 index 00000000..03897e9e --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-12.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.18/html_split/_0023points_002dto_002dcover_002d9.html b/0.0.18/html_split/_0023points_002dto_002dcover_002d9.html new file mode 100644 index 00000000..d30dd490 --- /dev/null +++ b/0.0.18/html_split/_0023points_002dto_002dcover_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-9.

+ diff --git a/0.0.18/html_split/_0023preprocessor.html b/0.0.18/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.18/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.18/html_split/_0023references.html b/0.0.18/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.18/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.18/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.18/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.18/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.18/html_split/_0023software_002ddesign.html b/0.0.18/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.18/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.18/html_split/_0023standard_002dlibrary.html b/0.0.18/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.18/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes.html b/0.0.18/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d1.html b/0.0.18/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d10.html b/0.0.18/html_split/_0023student_002doutcomes_002d10.html new file mode 100644 index 00000000..b6e9f315 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-10.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d11.html b/0.0.18/html_split/_0023student_002doutcomes_002d11.html new file mode 100644 index 00000000..2e7468d2 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-11.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d12.html b/0.0.18/html_split/_0023student_002doutcomes_002d12.html new file mode 100644 index 00000000..efd9dbf4 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-12.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d13.html b/0.0.18/html_split/_0023student_002doutcomes_002d13.html new file mode 100644 index 00000000..328f4845 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-13.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d2.html b/0.0.18/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d3.html b/0.0.18/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d4.html b/0.0.18/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d5.html b/0.0.18/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d6.html b/0.0.18/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d7.html b/0.0.18/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d8.html b/0.0.18/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.18/html_split/_0023student_002doutcomes_002d9.html b/0.0.18/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.18/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.18/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.18/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.18/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.18/html_split/_0023testing_002dand_002ddebugging.html b/0.0.18/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.18/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.18/html_split/_0023tooling.html b/0.0.18/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.18/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction.html b/0.0.18/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction_002d1.html b/0.0.18/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction_002d2.html b/0.0.18/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction_002d3.html b/0.0.18/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction_002d4.html b/0.0.18/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction_002d5.html b/0.0.18/html_split/_0023topic_002dintroduction_002d5.html new file mode 100644 index 00000000..e92b876c --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-5.

+ diff --git a/0.0.18/html_split/_0023topic_002dintroduction_002d6.html b/0.0.18/html_split/_0023topic_002dintroduction_002d6.html new file mode 100644 index 00000000..1869b1b9 --- /dev/null +++ b/0.0.18/html_split/_0023topic_002dintroduction_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-6.

+ diff --git a/0.0.18/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.18/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.18/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.18/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.18/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.18/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.18/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.18/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.18/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.18/html_split/index.html b/0.0.18/html_split/index.html new file mode 100644 index 00000000..d84b4507 --- /dev/null +++ b/0.0.18/html_split/index.html @@ -0,0 +1,276 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.18/html_split/unknown_node.html b/0.0.18/html_split/unknown_node.html new file mode 100644 index 00000000..43b144e3 --- /dev/null +++ b/0.0.18/html_split/unknown_node.html @@ -0,0 +1,1130 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

7.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+ +
+

+   [Contents]

+
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.2.3 Topic introduction

+

Very brief introduction to the topic. +

+

A definition extends a declaration, providing all that is needed for a +complete entity, e.g., allocate memory for variables, provide the +implementation for functions, complete definitions of data and function +members of a class. +

+
+

+   [Contents]

+
+

7.2.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. define a variable with a specific type int baz = 42; +
  2. define a function void bar() {} +
  3. define a class class Foo {}; +
  4. explain the one definition rule +
+ +
+

+   [Contents]

+
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+

+   [Contents]

+
+

7.2.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. organize variables, functions, classes into multiple translation units, +describing interface with declarations and providing the implementations +with definitions without violating ODR. +
  2. distinguish between template declaration and definition +
+ +
+

+   [Contents]

+
+

7.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.2.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+ +
+

+   [Contents]

+
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.3.3 Topic introduction

+

Very brief introduction to the topic. +

+

Introduce names and their associated type in a scope. +

+
+

+   [Contents]

+
+

7.3.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. declare a variable with a specific type ‘int baz;’ +
  2. declare a function ‘void bar();’ +
  3. declare a class ‘class Foo;’ +
  4. forward declare a user-defined type or a function +
  5. explain the difference between a definition and a declaration +
+ +
+

+   [Contents]

+
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+

+   [Contents]

+
+

7.3.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.3.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. create header and source files with a declaration in the former and +definition of a variable/function in the latter +
  2. declare type aliases to introduce a type with an alternative name ‘using +std::string;’ +
  3. write a forward template declaration +
+ +
+

+   [Contents]

+
+

7.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.3.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.3.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + +

See concepts. +

+

See user-defined-literals. +

+
+

+   [Contents]

+
+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

7.4.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

7.4.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.4.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.4.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.4.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.5.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

7.5.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. +[C++ object +model: declarations] +

+
+

+   [Contents]

+
+

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.5.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.5.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

7.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

7.6.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.6.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

7.8 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

7.8.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

7.8.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

7.8.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

7.8.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.8.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.8.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

7.8.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.8.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

7.8.3 Advanced

+ + + + + + diff --git a/0.0.19/guidelines.epub b/0.0.19/guidelines.epub new file mode 100644 index 00000000..4abe763f Binary files /dev/null and b/0.0.19/guidelines.epub differ diff --git a/0.0.19/html/images/cpp_logo.png b/0.0.19/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.19/html/images/cpp_logo.png differ diff --git a/0.0.19/html/index.html b/0.0.19/html/index.html new file mode 100644 index 00000000..7529a944 --- /dev/null +++ b/0.0.19/html/index.html @@ -0,0 +1,1941 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.19

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.19/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/0.0.19/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.19/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations???
[def]Definitions✔️✔️✔️
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[coe]Categories of Errors✔️✔️
[?]errno???
[?]Error Codes???
[eh]Exception Handling✔️✔️✔️
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

7.1.4 Foundational: How and when are copies made

+

7.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

7.1.5 Main: Implementing user-defined copy operations

+

7.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

7.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

7.2 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • A definition is a declaration that supplies all that is needed for a complete entity
  • +
  • int baz = 42;
  • +
  • void bar() { /* implementation */ }
  • +
  • class Foo { /* class body */ };
  • +
+

7.2.3 Topic introduction

+

Very brief introduction to the topic.

+

A definition extends a declaration, providing all that is needed for a complete entity, e.g., allocate memory for variables, provide the implementation for functions, complete definitions of data and function members of a class.

+

7.2.4 Foundational: Defining variables and ODR

+

7.2.4.1 Background/Required Knowledge

+

A student:

+ +

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. define a variable with a specific type int baz = 42;
  2. +
  3. define a function void bar() {}
  4. +
  5. define a class class Foo {};
  6. +
  7. explain the one definition rule
  8. +
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.2.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • One definition rule (ODR)
  • +
+

7.2.5 Main: Defining for programs

+

7.2.5.1 Background/Required Knowledge

+ +

7.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. organize variables, functions, classes into multiple translation units, describing interface with declarations and providing the implementations with definitions without violating ODR.
  2. +
  3. distinguish between template declaration and definition
  4. +
+

7.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Putting a definition into a header file that is included more than once leads to ODR violations, possibly resulting in linker errors.
  • +
+

7.2.5.4 Points to cover

+

This section lists important details for each point.

+

7.2.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • ABI Incompatibilities: Different definitions of the same type in multiple object files can lead to subtle program errors.
  • +
+

7.3 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Introduces a name and it’s type
  • +
  • int baz;
  • +
  • void bar();
  • +
  • class Foo;
  • +
+

7.3.3 Topic introduction

+

Very brief introduction to the topic.

+

Introduce names and their associated type in a scope.

+

7.3.4 Foundational: Declaring variables

+

7.3.4.1 Background/Required Knowledge

+

A student:

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type)
    • +
    • int (Integer type)
    • +
    • double (Floating-point type)
    • +
  • +
+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. declare a variable with a specific type ‘int baz;’
  2. +
  3. declare a function ‘void bar();’
  4. +
  5. declare a class ‘class Foo;’
  6. +
  7. forward declare a user-defined type or a function
  8. +
  9. explain the difference between a definition and a declaration
  10. +
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.3.4.4 Points to cover

+

This section lists important details for each point.

+

7.3.5 Main: Declarations for programs

+

7.3.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Basic template syntax
  • +
+

7.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. create header and source files with a declaration in the former and definition of a variable/function in the latter
  2. +
  3. declare type aliases to introduce a type with an alternative name ‘using std::string;’
  4. +
  5. write a forward template declaration
  6. +
+

7.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Declaring aliases can introduce name clashes
  • +
  • Prefer using declaration’s over using directives in header files [link]
  • +
  • The order of declarations dictates the order of initialization
  • +
+

7.3.5.4 Points to cover

+

This section lists important details for each point.

+

7.3.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • asm declaration
  • +
  • using-enum-declaration
  • +
  • extern “C” declarations
  • +
+

See concepts.

+

See user-defined-literals.

+

7.4 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

7.4.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

7.4.4 Foundational: Calling static_assert with a constant expression

+

7.4.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

7.4.5 Main: Contracts and static_assert

+

7.4.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

7.4.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.5 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.5.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.5.4 Foundational: Using UDLs

+

7.5.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.5.4.4 Points to cover

+

This section lists important details for each point.

+

7.5.5 Main: implementing UDLs

+

7.5.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.6.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.6.4 Foundational: Using and defining functions with default arguments

+

7.6.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.6.5 Main: implementing *

+

7.6.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.6.5.4 Points to cover

+

This section lists important details for each point.

+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

7.7 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

7.8 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

7.8.1 Foundational: Writing requires-expressions

+

7.8.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

7.8.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

7.8.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

7.8.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

7.8.2 Main: Advanced requirements

+

7.8.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

7.8.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

7.8.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.8.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

7.8.3 Advanced

+

7.9 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+

7.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

C++ offers a type safe way of passing around errors, contrary to the C-style of error handling, by this, we prevent bugs when passing error codes. Furthermore, error handling with error codes is more commonly used than exception handling, which only should be used in exceptional situations and in some environments is not feasible at all, e.g., in embedded or performance critical software.

+

7.9.3 Topic introduction

+

Very brief introduction to the topic.

+

C++ offers std::error_code, which encapsulates error codes in a type safe way. This topic describes how to use these error codes.

+

7.9.4 Foundational: Handling error codes with std::error_code

+

7.9.4.1 Background/Required Knowledge

+

A student:

+ +

7.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain the message of the error code or check if an error occurred.
  2. +
  3. distinguish between the different categories and make justified decisions when to use which
  4. +
+

7.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • a brief overview of std::error_code and how to use it
  • +
+

7.9.5 Main: Designing APIs around std::error_code

+

7.9.5.1 Background/Required Knowledge

+
    +
  • should know how to use reference parameters as an output parameter
  • +
+

7.9.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. create an error_code and design API that work with std:error_code
  2. +
  3. write code that utilizes std::error_category
  4. +
  5. explain the difference between C-style error handling with errno and std::error_code
  6. +
  7. make effective use of the interface of std::error_code
  8. +
+

7.9.5.3 Caveats

+
    +
  • reset errno before calling a function that might set errno (better pass an input parameter std::error_code)
  • +
+

7.9.5.4 Points to cover

+
    +
  • provide a full picture of std::error_code and it’s APIs
  • +
  • std::error_category (explorative)
  • +
+

7.9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • implementing your own error_category
  • +
+

7.9.7 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+

7.9.8 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Exception handling is used to be able to continue the program in case of exceptional situations (like requesting a ridiculous amount of memory: bad_alloc).

+

7.9.9 Topic introduction

+

Very brief introduction to the topic.

+

There are other forms of handling difficult situations, but here we concentrate on exception handling and the peculiarities/characteristics of it. Because there are different forms, we should know when to use which type of handling special situations.

+

7.9.10 Foundational: Standards exception hierarchy

+

7.9.10.1 Background/Required Knowledge

+

A student:

+ +

7.9.10.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Explain how some std:: calls may cause an exception
  2. +
  3. Discern the different standard exception types
  4. +
  5. Write simple try … except code (e.g., out of memory, vector at indexing)
  6. +
  7. Explain on a “simplified” conceptual level what happens when an exception is thrown and is bubbled up through the callers until it is caught
  8. +
+

7.9.10.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Exceptions should be used for exceptional situations and should not be used to manage normal control flow.
  • +
+

7.9.10.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Exception hierarchy from the standard library
  • +
  • Common library functions that may throw exceptions
  • +
  • Basic handling exceptions: try/catch/throw
  • +
  • How exceptions bubble up until caught
  • +
+

7.9.11 Main: Exception guarantees

+

7.9.11.1 Background/Required Knowledge

+
    +
  • RAII
  • +
  • Order of construction/destruction of class members
  • +
+

7.9.11.2 Student outcomes

+

A student should be able to:

+
    +
  1. Explain the four different exception guarantees
  2. +
  3. Explain the exception guarantees that the standard library containers offer.
  4. +
  5. Explain what happens when a exception is thrown in constructor
  6. +
+

7.9.11.3 Caveats

+
    +
  • Make sure code is designed with RAII in mind to prevent resources leaking during exception handling, when the stack is unwound.
  • +
  • Care should be taken in constructor design to make all fully constructed members deleted when the stack unwinding mechanism is activated.
  • +
+

7.9.11.4 Points to cover

+
    +
  • Exception guarantees: Nothrow/Strong/Basic/No
  • +
  • Rethrowing an exception
  • +
+

7.9.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • Rethrowing a modified exception
  • +
  • Writing exception safe containers
  • +
+

7.10 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.10.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+

7.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Programs can run in a normal state or erroneous state. Students should be able to identify different types of erroneous state and how to best handle them.

+

7.10.3 Topic introduction

+

Very brief introduction to the topic.

+

This topic is an umbrella topic that refers to the different topics for types of errors and error handling.

+

7.10.4 Foundational: Categories of errors

+

7.10.4.1 Background/Required Knowledge

+

A student:

+ +

7.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Describe different kinds of errors and exceptional situations that require different approaches of error handling.
  2. +
  3. Provide some examples of the different error categories.
  4. +
  5. Identify potential erroneous code sections and attribute them to different error categories.
  6. +
+

7.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.10.4.4 Points to cover

+

This section lists important details for each point.

+

Errors can happen at different times during software lifetime.

+
    +
  • Compile-time errors
  • +
  • Link-time errors
  • +
  • Execution-time errors
  • +
+

There are different types of errors

+
    +
  • Logic errors (violations of logical preconditions)
  • +
  • Run-time errors (errors during code execution due to causes that are external to the program)
  • +
+

7.10.5 Main: Handling different categories of errors

+

7.10.5.1 Background/Required Knowledge

+

7.10.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. pick the right error handling approach for a given problem.
  2. +
  3. enumerate different error handling strategies.
  4. +
  5. make a clear distinction between error-handling code and normal-case handling code
  6. +
+

7.10.5.3 Caveats

+
    +
  • The different error handling strategies have different trade-offs (runtime performance, readability, …)
  • +
  • The trade-off space depends on the run-time context (embedded, …)
  • +
  • There also exist unhandleable errors (e.g., ODR violations, undefined behavior)
  • +
+

7.10.5.4 Points to cover

+ +

7.10.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

9 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

11 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

12 References

+

12.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.19/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html b/0.0.19/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html new file mode 100644 index 00000000..40a21764 --- /dev/null +++ b/0.0.19/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html @@ -0,0 +1,59 @@ + + + + + +Advanced Exception-safe containers and edge cases (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.9.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + + + diff --git a/0.0.19/html_split/Advanced-Special-cases-and-peculiarities.html b/0.0.19/html_split/Advanced-Special-cases-and-peculiarities.html new file mode 100644 index 00000000..10f0a59e --- /dev/null +++ b/0.0.19/html_split/Advanced-Special-cases-and-peculiarities.html @@ -0,0 +1,59 @@ + + + + + +Advanced Special cases and peculiarities (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.2.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + + + diff --git a/0.0.19/html_split/Advanced.html b/0.0.19/html_split/Advanced.html new file mode 100644 index 00000000..b48aaed2 --- /dev/null +++ b/0.0.19/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.19/html_split/Background_002fRequired-Knowledge.html b/0.0.19/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..4a2158eb --- /dev/null +++ b/0.0.19/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,64 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * +explain what an object is? +[C++ object model: +objects], [C++ object +model: constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.19/html_split/Background_002fRequired-knowledge.html b/0.0.19/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..d6a71986 --- /dev/null +++ b/0.0.19/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.6.5.1 Background/Required knowledge

+ + + + + + + diff --git a/0.0.19/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.19/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..7b78e969 --- /dev/null +++ b/0.0.19/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,61 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations???
[‘def’]Definitions‘✔️’‘✔️’‘✔️’
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.19/html_split/Building.html b/0.0.19/html_split/Building.html new file mode 100644 index 00000000..a50a84a0 --- /dev/null +++ b/0.0.19/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.19/html_split/C_002b_002b-object-model-Declarations.html b/0.0.19/html_split/C_002b_002b-object-model-Declarations.html new file mode 100644 index 00000000..bba29b88 --- /dev/null +++ b/0.0.19/html_split/C_002b_002b-object-model-Declarations.html @@ -0,0 +1,68 @@ + + + + + +C++ object model Declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.3 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.19/html_split/C_002b_002b-object-model-Definitions.html b/0.0.19/html_split/C_002b_002b-object-model-Definitions.html new file mode 100644 index 00000000..f9c6074c --- /dev/null +++ b/0.0.19/html_split/C_002b_002b-object-model-Definitions.html @@ -0,0 +1,68 @@ + + + + + +C++ object model Definitions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.2 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.19/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.19/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..56b717b0 --- /dev/null +++ b/0.0.19/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.19/html_split/Caveats.html b/0.0.19/html_split/Caveats.html new file mode 100644 index 00000000..a3ad88c6 --- /dev/null +++ b/0.0.19/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.19/html_split/Compilation-Model.html b/0.0.19/html_split/Compilation-Model.html new file mode 100644 index 00000000..41802d4a --- /dev/null +++ b/0.0.19/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.19/html_split/Compile_002dTime-Computation.html b/0.0.19/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..4e9e67d1 --- /dev/null +++ b/0.0.19/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.19/html_split/Context-and-Aim-of-This-Guide.html b/0.0.19/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..57fb0592 --- /dev/null +++ b/0.0.19/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.19/html_split/Contributing-to-This-Document.html b/0.0.19/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..2faa7724 --- /dev/null +++ b/0.0.19/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.19/html_split/Contributors.html b/0.0.19/html_split/Contributors.html new file mode 100644 index 00000000..5531c928 --- /dev/null +++ b/0.0.19/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

9 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.19/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.19/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..07022629 --- /dev/null +++ b/0.0.19/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,75 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

7 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + + + + + diff --git a/0.0.19/html_split/Error-Handling.html b/0.0.19/html_split/Error-Handling.html new file mode 100644 index 00000000..8ab42e92 --- /dev/null +++ b/0.0.19/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘coe’]Categories of Errors‘✔️’‘✔️’
[‘?’]errno???
[‘?’]Error Codes???
[‘eh’]Exception Handling‘✔️’‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.19/html_split/Error-handling-Categories-of-errors.html b/0.0.19/html_split/Error-handling-Categories-of-errors.html new file mode 100644 index 00000000..9381d369 --- /dev/null +++ b/0.0.19/html_split/Error-handling-Categories-of-errors.html @@ -0,0 +1,68 @@ + + + + + +Error handling Categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.10 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.19/html_split/Error-handling-Error-codes.html b/0.0.19/html_split/Error-handling-Error-codes.html new file mode 100644 index 00000000..6f8c4c86 --- /dev/null +++ b/0.0.19/html_split/Error-handling-Error-codes.html @@ -0,0 +1,79 @@ + + + + + +Error handling Error codes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.9 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + + + + + + + diff --git a/0.0.19/html_split/External-ie-Non-Standard-Libraries.html b/0.0.19/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..0b3c0fa4 --- /dev/null +++ b/0.0.19/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.19/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.19/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..0919c625 --- /dev/null +++ b/0.0.19/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Categories-of-errors.html b/0.0.19/html_split/Foundational-Categories-of-errors.html new file mode 100644 index 00000000..a76e900b --- /dev/null +++ b/0.0.19/html_split/Foundational-Categories-of-errors.html @@ -0,0 +1,61 @@ + + + + + +Foundational Categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.10.4 Foundational: Categories of errors

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Declaring-variables.html b/0.0.19/html_split/Foundational-Declaring-variables.html new file mode 100644 index 00000000..a7c99a50 --- /dev/null +++ b/0.0.19/html_split/Foundational-Declaring-variables.html @@ -0,0 +1,61 @@ + + + + + +Foundational Declaring variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.3.4 Foundational: Declaring variables

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Defining-variables-and-ODR.html b/0.0.19/html_split/Foundational-Defining-variables-and-ODR.html new file mode 100644 index 00000000..95b361de --- /dev/null +++ b/0.0.19/html_split/Foundational-Defining-variables-and-ODR.html @@ -0,0 +1,61 @@ + + + + + +Foundational Defining variables and ODR (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.2.4 Foundational: Defining variables and ODR

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html b/0.0.19/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html new file mode 100644 index 00000000..ee74039b --- /dev/null +++ b/0.0.19/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html @@ -0,0 +1,62 @@ + + + + + +Foundational Handling error codes with stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.9.4 Foundational: Handling error codes with

+

std::error_code +

+ + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.19/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..a3e9be7a --- /dev/null +++ b/0.0.19/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Standards-exception-hierarchy.html b/0.0.19/html_split/Foundational-Standards-exception-hierarchy.html new file mode 100644 index 00000000..bcd4358b --- /dev/null +++ b/0.0.19/html_split/Foundational-Standards-exception-hierarchy.html @@ -0,0 +1,61 @@ + + + + + +Foundational Standards exception hierarchy (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.9.10 Foundational: Standards exception hierarchy

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Using-UDLs.html b/0.0.19/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..17a22a20 --- /dev/null +++ b/0.0.19/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.19/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..67194e27 --- /dev/null +++ b/0.0.19/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.19/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.19/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..5808e0df --- /dev/null +++ b/0.0.19/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.8.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Functions-default-argument.html b/0.0.19/html_split/Functions-default-argument.html new file mode 100644 index 00000000..d16ab751 --- /dev/null +++ b/0.0.19/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.19/html_split/Functions-user_002ddefined-literals.html b/0.0.19/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..ad41e1f1 --- /dev/null +++ b/0.0.19/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,65 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Functions.html b/0.0.19/html_split/Functions.html new file mode 100644 index 00000000..8e3d484c --- /dev/null +++ b/0.0.19/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.19/html_split/Generic-Programming-Templates.html b/0.0.19/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..3ed32f58 --- /dev/null +++ b/0.0.19/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.19/html_split/Glossary.html b/0.0.19/html_split/Glossary.html new file mode 100644 index 00000000..99ff3571 --- /dev/null +++ b/0.0.19/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.19/html_split/How-To-Contribute.html b/0.0.19/html_split/How-To-Contribute.html new file mode 100644 index 00000000..91b73c92 --- /dev/null +++ b/0.0.19/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.19/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.19/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1454f019 --- /dev/null +++ b/0.0.19/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.19/html_split/License.html b/0.0.19/html_split/License.html new file mode 100644 index 00000000..5835f48a --- /dev/null +++ b/0.0.19/html_split/License.html @@ -0,0 +1,99 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+ + + + + + diff --git a/0.0.19/html_split/Main-Advanced-requirements.html b/0.0.19/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..16433ad6 --- /dev/null +++ b/0.0.19/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

7.8.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Contracts-and-static_005fassert.html b/0.0.19/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..b0d6e8d9 --- /dev/null +++ b/0.0.19/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Declarations-for-programs.html b/0.0.19/html_split/Main-Declarations-for-programs.html new file mode 100644 index 00000000..9b7d307b --- /dev/null +++ b/0.0.19/html_split/Main-Declarations-for-programs.html @@ -0,0 +1,61 @@ + + + + + +Main Declarations for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.3.5 Main: Declarations for programs

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Defining-for-programs.html b/0.0.19/html_split/Main-Defining-for-programs.html new file mode 100644 index 00000000..87edef42 --- /dev/null +++ b/0.0.19/html_split/Main-Defining-for-programs.html @@ -0,0 +1,61 @@ + + + + + +Main Defining for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.2.5 Main: Defining for programs

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Designing-APIs-around-stderror_005fcode.html b/0.0.19/html_split/Main-Designing-APIs-around-stderror_005fcode.html new file mode 100644 index 00000000..2e18ed16 --- /dev/null +++ b/0.0.19/html_split/Main-Designing-APIs-around-stderror_005fcode.html @@ -0,0 +1,61 @@ + + + + + +Main Designing APIs around stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.9.5 Main: Designing APIs around std::error_code

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Exception-guarantees.html b/0.0.19/html_split/Main-Exception-guarantees.html new file mode 100644 index 00000000..c8e4867b --- /dev/null +++ b/0.0.19/html_split/Main-Exception-guarantees.html @@ -0,0 +1,61 @@ + + + + + +Main Exception guarantees (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.9.11 Main: Exception guarantees

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Handling-different-categories-of-errors.html b/0.0.19/html_split/Main-Handling-different-categories-of-errors.html new file mode 100644 index 00000000..51779ebc --- /dev/null +++ b/0.0.19/html_split/Main-Handling-different-categories-of-errors.html @@ -0,0 +1,61 @@ + + + + + +Main Handling different categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.10.5 Main: Handling different categories of errors

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.19/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..3f51dae9 --- /dev/null +++ b/0.0.19/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-implementing-UDLs.html b/0.0.19/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..cfcca9a6 --- /dev/null +++ b/0.0.19/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.5.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.19/html_split/Main-implementing-_002a.html b/0.0.19/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..d0b510bb --- /dev/null +++ b/0.0.19/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

7.6.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.19/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.19/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..011ef71d --- /dev/null +++ b/0.0.19/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.4 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.19/html_split/Module-name-Requires-Expressions.html b/0.0.19/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..bb32c763 --- /dev/null +++ b/0.0.19/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

7.7 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.19/html_split/Motivation.html b/0.0.19/html_split/Motivation.html new file mode 100644 index 00000000..e1693392 --- /dev/null +++ b/0.0.19/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.19/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.19/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..df78ee34 --- /dev/null +++ b/0.0.19/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,78 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.19/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/0.0.19/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.19/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.19/html_split/Organization-of-This-Document.html b/0.0.19/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..37c73dba --- /dev/null +++ b/0.0.19/html_split/Organization-of-This-Document.html @@ -0,0 +1,95 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.19/html_split/Overview.html b/0.0.19/html_split/Overview.html new file mode 100644 index 00000000..b01d3569 --- /dev/null +++ b/0.0.19/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.19/html_split/Points-to-cover.html b/0.0.19/html_split/Points-to-cover.html new file mode 100644 index 00000000..44440755 --- /dev/null +++ b/0.0.19/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.19/html_split/Preprocessor.html b/0.0.19/html_split/Preprocessor.html new file mode 100644 index 00000000..b20bf653 --- /dev/null +++ b/0.0.19/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.19/html_split/References-on-Learning-Outcomes.html b/0.0.19/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..edf49930 --- /dev/null +++ b/0.0.19/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

12.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.19/html_split/References.html b/0.0.19/html_split/References.html new file mode 100644 index 00000000..8484d341 --- /dev/null +++ b/0.0.19/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

12 References

+ + + + + + + + + + + diff --git a/0.0.19/html_split/Software-Design.html b/0.0.19/html_split/Software-Design.html new file mode 100644 index 00000000..dbd34b62 --- /dev/null +++ b/0.0.19/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.19/html_split/Standard-Library.html b/0.0.19/html_split/Standard-Library.html new file mode 100644 index 00000000..0d173a45 --- /dev/null +++ b/0.0.19/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.19/html_split/Student-outcomes.html b/0.0.19/html_split/Student-outcomes.html new file mode 100644 index 00000000..1d53b492 --- /dev/null +++ b/0.0.19/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.19/html_split/Summary-of-Modules-and-Topics.html b/0.0.19/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..33358df9 --- /dev/null +++ b/0.0.19/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,100 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.19/html_split/Testing-and-Debugging.html b/0.0.19/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..497707a7 --- /dev/null +++ b/0.0.19/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

6.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.19/html_split/Tooling.html b/0.0.19/html_split/Tooling.html new file mode 100644 index 00000000..e479ed29 --- /dev/null +++ b/0.0.19/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.19/html_split/Topic-introduction.html b/0.0.19/html_split/Topic-introduction.html new file mode 100644 index 00000000..c011ddf8 --- /dev/null +++ b/0.0.19/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.19/html_split/Use-of-This-Document.html b/0.0.19/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..dedcdd3d --- /dev/null +++ b/0.0.19/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.19/html_split/User_002dDefined-Types-Classes.html b/0.0.19/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..d7acd5e8 --- /dev/null +++ b/0.0.19/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.19/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.19/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..c5a1bfbe --- /dev/null +++ b/0.0.19/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

12.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.19/html_split/_0023advanced.html b/0.0.19/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.19/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.19/html_split/_0023advanced_002d1.html b/0.0.19/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.19/html_split/_0023advanced_002d2.html b/0.0.19/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.19/html_split/_0023advanced_002d3.html b/0.0.19/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.19/html_split/_0023advanced_002d4.html b/0.0.19/html_split/_0023advanced_002d4.html new file mode 100644 index 00000000..a320ab5d --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-4.

+ diff --git a/0.0.19/html_split/_0023advanced_002d5.html b/0.0.19/html_split/_0023advanced_002d5.html new file mode 100644 index 00000000..b823fd06 --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-5.

+ diff --git a/0.0.19/html_split/_0023advanced_002d6.html b/0.0.19/html_split/_0023advanced_002d6.html new file mode 100644 index 00000000..d70f35fc --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-6.

+ diff --git a/0.0.19/html_split/_0023advanced_002dexception_002dsafe_002dcontainers_002dand_002dedge_002dcases.html b/0.0.19/html_split/_0023advanced_002dexception_002dsafe_002dcontainers_002dand_002dedge_002dcases.html new file mode 100644 index 00000000..35d5f330 --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002dexception_002dsafe_002dcontainers_002dand_002dedge_002dcases.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-exception-safe-containers-and-edge-cases (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-exception-safe-containers-and-edge-cases.

+ diff --git a/0.0.19/html_split/_0023advanced_002dspecial_002dcases_002dand_002dpeculiarities.html b/0.0.19/html_split/_0023advanced_002dspecial_002dcases_002dand_002dpeculiarities.html new file mode 100644 index 00000000..db94ba06 --- /dev/null +++ b/0.0.19/html_split/_0023advanced_002dspecial_002dcases_002dand_002dpeculiarities.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-special-cases-and-peculiarities (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-special-cases-and-peculiarities.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d10.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d10.html new file mode 100644 index 00000000..eb0e4401 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-10.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d11.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d11.html new file mode 100644 index 00000000..6977882b --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-11.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d12.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d12.html new file mode 100644 index 00000000..7729c323 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-12.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d13.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d13.html new file mode 100644 index 00000000..039c0d3d --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-13.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d14.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d14.html new file mode 100644 index 00000000..2846fa72 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d14.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-14.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d15.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d15.html new file mode 100644 index 00000000..a4cd1874 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d15.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-15.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d16.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d16.html new file mode 100644 index 00000000..4489e3be --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d16.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-16.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d17.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d17.html new file mode 100644 index 00000000..77a6addd --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d17.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-17.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d18.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d18.html new file mode 100644 index 00000000..cf9a64d4 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d18.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-18.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d19.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d19.html new file mode 100644 index 00000000..121441a3 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d19.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-19.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..34298e91 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.19/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.19/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.19/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.19/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.19/html_split/_0023building.html b/0.0.19/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.19/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.19/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.19/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.19/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.19/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html b/0.0.19/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html new file mode 100644 index 00000000..fe710a9f --- /dev/null +++ b/0.0.19/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-declarations.

+ diff --git a/0.0.19/html_split/_0023c_002dobject_002dmodel_002ddefinitions.html b/0.0.19/html_split/_0023c_002dobject_002dmodel_002ddefinitions.html new file mode 100644 index 00000000..b76a8b17 --- /dev/null +++ b/0.0.19/html_split/_0023c_002dobject_002dmodel_002ddefinitions.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-definitions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-definitions.

+ diff --git a/0.0.19/html_split/_0023caveats.html b/0.0.19/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.19/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.19/html_split/_0023caveats_002d1.html b/0.0.19/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.19/html_split/_0023caveats_002d10.html b/0.0.19/html_split/_0023caveats_002d10.html new file mode 100644 index 00000000..da12422d --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-10.

+ diff --git a/0.0.19/html_split/_0023caveats_002d11.html b/0.0.19/html_split/_0023caveats_002d11.html new file mode 100644 index 00000000..6e2bb589 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-11.

+ diff --git a/0.0.19/html_split/_0023caveats_002d12.html b/0.0.19/html_split/_0023caveats_002d12.html new file mode 100644 index 00000000..5badafbf --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-12.

+ diff --git a/0.0.19/html_split/_0023caveats_002d13.html b/0.0.19/html_split/_0023caveats_002d13.html new file mode 100644 index 00000000..e42da0cd --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-13.

+ diff --git a/0.0.19/html_split/_0023caveats_002d14.html b/0.0.19/html_split/_0023caveats_002d14.html new file mode 100644 index 00000000..c6f3b371 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d14.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-14.

+ diff --git a/0.0.19/html_split/_0023caveats_002d15.html b/0.0.19/html_split/_0023caveats_002d15.html new file mode 100644 index 00000000..84c02109 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d15.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-15.

+ diff --git a/0.0.19/html_split/_0023caveats_002d16.html b/0.0.19/html_split/_0023caveats_002d16.html new file mode 100644 index 00000000..46520604 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d16.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-16.

+ diff --git a/0.0.19/html_split/_0023caveats_002d17.html b/0.0.19/html_split/_0023caveats_002d17.html new file mode 100644 index 00000000..017a129f --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d17.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-17.

+ diff --git a/0.0.19/html_split/_0023caveats_002d18.html b/0.0.19/html_split/_0023caveats_002d18.html new file mode 100644 index 00000000..48f80ecf --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d18.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-18.

+ diff --git a/0.0.19/html_split/_0023caveats_002d19.html b/0.0.19/html_split/_0023caveats_002d19.html new file mode 100644 index 00000000..a8fc473d --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d19.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-19.

+ diff --git a/0.0.19/html_split/_0023caveats_002d2.html b/0.0.19/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.19/html_split/_0023caveats_002d3.html b/0.0.19/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.19/html_split/_0023caveats_002d4.html b/0.0.19/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.19/html_split/_0023caveats_002d5.html b/0.0.19/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.19/html_split/_0023caveats_002d6.html b/0.0.19/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.19/html_split/_0023caveats_002d7.html b/0.0.19/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.19/html_split/_0023caveats_002d8.html b/0.0.19/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.19/html_split/_0023caveats_002d9.html b/0.0.19/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.19/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.19/html_split/_0023compilation_002dmodel.html b/0.0.19/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.19/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.19/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.19/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.19/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.19/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.19/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.19/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.19/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.19/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.19/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.19/html_split/_0023contributors.html b/0.0.19/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.19/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.19/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.19/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.19/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.19/html_split/_0023error_002dhandling.html b/0.0.19/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.19/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.19/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html b/0.0.19/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html new file mode 100644 index 00000000..97b31242 --- /dev/null +++ b/0.0.19/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling-categories-of-errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling-categories-of-errors.

+ diff --git a/0.0.19/html_split/_0023error_002dhandling_002derror_002dcodes.html b/0.0.19/html_split/_0023error_002dhandling_002derror_002dcodes.html new file mode 100644 index 00000000..a966f0a4 --- /dev/null +++ b/0.0.19/html_split/_0023error_002dhandling_002derror_002dcodes.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling-error-codes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling-error-codes.

+ diff --git a/0.0.19/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.19/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.19/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.19/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.19/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.19/html_split/_0023foundational_002dcategories_002dof_002derrors.html b/0.0.19/html_split/_0023foundational_002dcategories_002dof_002derrors.html new file mode 100644 index 00000000..6156f14c --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dcategories_002dof_002derrors.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-categories-of-errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-categories-of-errors.

+ diff --git a/0.0.19/html_split/_0023foundational_002ddeclaring_002dvariables.html b/0.0.19/html_split/_0023foundational_002ddeclaring_002dvariables.html new file mode 100644 index 00000000..63bc7edc --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002ddeclaring_002dvariables.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-declaring-variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-declaring-variables.

+ diff --git a/0.0.19/html_split/_0023foundational_002ddefining_002dvariables_002dand_002dodr.html b/0.0.19/html_split/_0023foundational_002ddefining_002dvariables_002dand_002dodr.html new file mode 100644 index 00000000..2f9e1a76 --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002ddefining_002dvariables_002dand_002dodr.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-defining-variables-and-odr (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-defining-variables-and-odr.

+ diff --git a/0.0.19/html_split/_0023foundational_002dhandling_002derror_002dcodes_002dwith_002dstderror_005fcode.html b/0.0.19/html_split/_0023foundational_002dhandling_002derror_002dcodes_002dwith_002dstderror_005fcode.html new file mode 100644 index 00000000..f7a0fe53 --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dhandling_002derror_002dcodes_002dwith_002dstderror_005fcode.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-handling-error-codes-with-stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-handling-error-codes-with-stderror_code.

+ diff --git a/0.0.19/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.19/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.19/html_split/_0023foundational_002dstandards_002dexception_002dhierarchy.html b/0.0.19/html_split/_0023foundational_002dstandards_002dexception_002dhierarchy.html new file mode 100644 index 00000000..5dfbff7c --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dstandards_002dexception_002dhierarchy.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-standards-exception-hierarchy (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-standards-exception-hierarchy.

+ diff --git a/0.0.19/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.19/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.19/html_split/_0023foundational_002dusing_002dudls.html b/0.0.19/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.19/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.19/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.19/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.19/html_split/_0023functions.html b/0.0.19/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.19/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.19/html_split/_0023functions_002ddefault_002dargument.html b/0.0.19/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.19/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.19/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.19/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.19/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.19/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.19/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.19/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.19/html_split/_0023glossary.html b/0.0.19/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.19/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.19/html_split/_0023how_002dto_002dcontribute.html b/0.0.19/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.19/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.19/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.19/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.19/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.19/html_split/_0023license.html b/0.0.19/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.19/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.19/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.19/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.19/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.19/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.19/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.19/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.19/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html b/0.0.19/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html new file mode 100644 index 00000000..f64b1119 --- /dev/null +++ b/0.0.19/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html @@ -0,0 +1,40 @@ + + + + + + +#main-declarations-for-programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-declarations-for-programs.

+ diff --git a/0.0.19/html_split/_0023main_002ddefining_002dfor_002dprograms.html b/0.0.19/html_split/_0023main_002ddefining_002dfor_002dprograms.html new file mode 100644 index 00000000..543487e2 --- /dev/null +++ b/0.0.19/html_split/_0023main_002ddefining_002dfor_002dprograms.html @@ -0,0 +1,40 @@ + + + + + + +#main-defining-for-programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-defining-for-programs.

+ diff --git a/0.0.19/html_split/_0023main_002ddesigning_002dapis_002daround_002dstderror_005fcode.html b/0.0.19/html_split/_0023main_002ddesigning_002dapis_002daround_002dstderror_005fcode.html new file mode 100644 index 00000000..6d5bb84c --- /dev/null +++ b/0.0.19/html_split/_0023main_002ddesigning_002dapis_002daround_002dstderror_005fcode.html @@ -0,0 +1,40 @@ + + + + + + +#main-designing-apis-around-stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-designing-apis-around-stderror_code.

+ diff --git a/0.0.19/html_split/_0023main_002dexception_002dguarantees.html b/0.0.19/html_split/_0023main_002dexception_002dguarantees.html new file mode 100644 index 00000000..13702b23 --- /dev/null +++ b/0.0.19/html_split/_0023main_002dexception_002dguarantees.html @@ -0,0 +1,40 @@ + + + + + + +#main-exception-guarantees (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-exception-guarantees.

+ diff --git a/0.0.19/html_split/_0023main_002dhandling_002ddifferent_002dcategories_002dof_002derrors.html b/0.0.19/html_split/_0023main_002dhandling_002ddifferent_002dcategories_002dof_002derrors.html new file mode 100644 index 00000000..5030ef32 --- /dev/null +++ b/0.0.19/html_split/_0023main_002dhandling_002ddifferent_002dcategories_002dof_002derrors.html @@ -0,0 +1,40 @@ + + + + + + +#main-handling-different-categories-of-errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-handling-different-categories-of-errors.

+ diff --git a/0.0.19/html_split/_0023main_002dimplementing.html b/0.0.19/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.19/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.19/html_split/_0023main_002dimplementing_002dudls.html b/0.0.19/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.19/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.19/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.19/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.19/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.19/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.19/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.19/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.19/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.19/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.19/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.19/html_split/_0023motivation.html b/0.0.19/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.19/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.19/html_split/_0023motivation_002d1.html b/0.0.19/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.19/html_split/_0023motivation_002d2.html b/0.0.19/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.19/html_split/_0023motivation_002d3.html b/0.0.19/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.19/html_split/_0023motivation_002d4.html b/0.0.19/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.19/html_split/_0023motivation_002d5.html b/0.0.19/html_split/_0023motivation_002d5.html new file mode 100644 index 00000000..e177cbf4 --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-5.

+ diff --git a/0.0.19/html_split/_0023motivation_002d6.html b/0.0.19/html_split/_0023motivation_002d6.html new file mode 100644 index 00000000..84378470 --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-6.

+ diff --git a/0.0.19/html_split/_0023motivation_002d7.html b/0.0.19/html_split/_0023motivation_002d7.html new file mode 100644 index 00000000..bd56988a --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-7.

+ diff --git a/0.0.19/html_split/_0023motivation_002d8.html b/0.0.19/html_split/_0023motivation_002d8.html new file mode 100644 index 00000000..e0a71ac7 --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-8.

+ diff --git a/0.0.19/html_split/_0023motivation_002d9.html b/0.0.19/html_split/_0023motivation_002d9.html new file mode 100644 index 00000000..f19f6b86 --- /dev/null +++ b/0.0.19/html_split/_0023motivation_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-9.

+ diff --git a/0.0.19/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.19/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.19/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.19/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.19/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.19/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.19/html_split/_0023overview.html b/0.0.19/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.19/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.19/html_split/_0023overview_002d1.html b/0.0.19/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.19/html_split/_0023overview_002d2.html b/0.0.19/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.19/html_split/_0023overview_002d3.html b/0.0.19/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.19/html_split/_0023overview_002d4.html b/0.0.19/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.19/html_split/_0023overview_002d5.html b/0.0.19/html_split/_0023overview_002d5.html new file mode 100644 index 00000000..173ebf32 --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#overview-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-5.

+ diff --git a/0.0.19/html_split/_0023overview_002d6.html b/0.0.19/html_split/_0023overview_002d6.html new file mode 100644 index 00000000..9c8c2476 --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#overview-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-6.

+ diff --git a/0.0.19/html_split/_0023overview_002d7.html b/0.0.19/html_split/_0023overview_002d7.html new file mode 100644 index 00000000..57f1a51a --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#overview-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-7.

+ diff --git a/0.0.19/html_split/_0023overview_002d8.html b/0.0.19/html_split/_0023overview_002d8.html new file mode 100644 index 00000000..c26d4ded --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#overview-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-8.

+ diff --git a/0.0.19/html_split/_0023overview_002d9.html b/0.0.19/html_split/_0023overview_002d9.html new file mode 100644 index 00000000..61e9212b --- /dev/null +++ b/0.0.19/html_split/_0023overview_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#overview-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-9.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover.html b/0.0.19/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d10.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d10.html new file mode 100644 index 00000000..dc428507 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-10.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d11.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d11.html new file mode 100644 index 00000000..15ba774d --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-11.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d12.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d12.html new file mode 100644 index 00000000..03897e9e --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-12.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d13.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d13.html new file mode 100644 index 00000000..a2497332 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-13.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d14.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d14.html new file mode 100644 index 00000000..2580f503 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d14.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-14.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d15.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d15.html new file mode 100644 index 00000000..e96f6f5c --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d15.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-15.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d16.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d16.html new file mode 100644 index 00000000..309b85b0 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d16.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-16.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d17.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d17.html new file mode 100644 index 00000000..bc281312 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d17.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-17.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d18.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d18.html new file mode 100644 index 00000000..104f3f1e --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d18.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-18.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.19/html_split/_0023points_002dto_002dcover_002d9.html b/0.0.19/html_split/_0023points_002dto_002dcover_002d9.html new file mode 100644 index 00000000..d30dd490 --- /dev/null +++ b/0.0.19/html_split/_0023points_002dto_002dcover_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-9.

+ diff --git a/0.0.19/html_split/_0023preprocessor.html b/0.0.19/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.19/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.19/html_split/_0023references.html b/0.0.19/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.19/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.19/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.19/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.19/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.19/html_split/_0023software_002ddesign.html b/0.0.19/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.19/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.19/html_split/_0023standard_002dlibrary.html b/0.0.19/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.19/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes.html b/0.0.19/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d1.html b/0.0.19/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d10.html b/0.0.19/html_split/_0023student_002doutcomes_002d10.html new file mode 100644 index 00000000..b6e9f315 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d10.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-10.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d11.html b/0.0.19/html_split/_0023student_002doutcomes_002d11.html new file mode 100644 index 00000000..2e7468d2 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d11.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-11.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d12.html b/0.0.19/html_split/_0023student_002doutcomes_002d12.html new file mode 100644 index 00000000..efd9dbf4 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d12.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-12.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d13.html b/0.0.19/html_split/_0023student_002doutcomes_002d13.html new file mode 100644 index 00000000..328f4845 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d13.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-13.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d14.html b/0.0.19/html_split/_0023student_002doutcomes_002d14.html new file mode 100644 index 00000000..0da77314 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d14.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-14.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d15.html b/0.0.19/html_split/_0023student_002doutcomes_002d15.html new file mode 100644 index 00000000..91f9812b --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d15.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-15.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d16.html b/0.0.19/html_split/_0023student_002doutcomes_002d16.html new file mode 100644 index 00000000..383a8437 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d16.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-16.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d17.html b/0.0.19/html_split/_0023student_002doutcomes_002d17.html new file mode 100644 index 00000000..1dd8eeeb --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d17.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-17.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d18.html b/0.0.19/html_split/_0023student_002doutcomes_002d18.html new file mode 100644 index 00000000..584e2702 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d18.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-18.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d19.html b/0.0.19/html_split/_0023student_002doutcomes_002d19.html new file mode 100644 index 00000000..aa061be8 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d19.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-19.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d2.html b/0.0.19/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d3.html b/0.0.19/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d4.html b/0.0.19/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d5.html b/0.0.19/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d6.html b/0.0.19/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d7.html b/0.0.19/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d8.html b/0.0.19/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.19/html_split/_0023student_002doutcomes_002d9.html b/0.0.19/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.19/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.19/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.19/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.19/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.19/html_split/_0023testing_002dand_002ddebugging.html b/0.0.19/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.19/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.19/html_split/_0023tooling.html b/0.0.19/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.19/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction.html b/0.0.19/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d1.html b/0.0.19/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d2.html b/0.0.19/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d3.html b/0.0.19/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d4.html b/0.0.19/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d5.html b/0.0.19/html_split/_0023topic_002dintroduction_002d5.html new file mode 100644 index 00000000..e92b876c --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-5.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d6.html b/0.0.19/html_split/_0023topic_002dintroduction_002d6.html new file mode 100644 index 00000000..1869b1b9 --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-6.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d7.html b/0.0.19/html_split/_0023topic_002dintroduction_002d7.html new file mode 100644 index 00000000..1e5c6a31 --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-7.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d8.html b/0.0.19/html_split/_0023topic_002dintroduction_002d8.html new file mode 100644 index 00000000..c83b0b5a --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-8.

+ diff --git a/0.0.19/html_split/_0023topic_002dintroduction_002d9.html b/0.0.19/html_split/_0023topic_002dintroduction_002d9.html new file mode 100644 index 00000000..3825e572 --- /dev/null +++ b/0.0.19/html_split/_0023topic_002dintroduction_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-9.

+ diff --git a/0.0.19/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.19/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.19/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.19/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.19/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.19/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.19/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.19/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.19/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.19/html_split/index.html b/0.0.19/html_split/index.html new file mode 100644 index 00000000..405046d7 --- /dev/null +++ b/0.0.19/html_split/index.html @@ -0,0 +1,336 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.19/html_split/unknown_node.html b/0.0.19/html_split/unknown_node.html new file mode 100644 index 00000000..731756c5 --- /dev/null +++ b/0.0.19/html_split/unknown_node.html @@ -0,0 +1,1588 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

7.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+ +
+

+   [Contents]

+
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.2.3 Topic introduction

+

Very brief introduction to the topic. +

+

A definition extends a declaration, providing all that is needed for a +complete entity, e.g., allocate memory for variables, provide the +implementation for functions, complete definitions of data and function +members of a class. +

+
+

+   [Contents]

+
+

7.2.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. define a variable with a specific type int baz = 42; +
  2. define a function void bar() {} +
  3. define a class class Foo {}; +
  4. explain the one definition rule +
+ +
+

+   [Contents]

+
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+

+   [Contents]

+
+

7.2.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. organize variables, functions, classes into multiple translation units, +describing interface with declarations and providing the implementations +with definitions without violating ODR. +
  2. distinguish between template declaration and definition +
+ +
+

+   [Contents]

+
+

7.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.2.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+ +
+

+   [Contents]

+
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.3.3 Topic introduction

+

Very brief introduction to the topic. +

+

Introduce names and their associated type in a scope. +

+
+

+   [Contents]

+
+

7.3.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. declare a variable with a specific type ‘int baz;’ +
  2. declare a function ‘void bar();’ +
  3. declare a class ‘class Foo;’ +
  4. forward declare a user-defined type or a function +
  5. explain the difference between a definition and a declaration +
+ +
+

+   [Contents]

+
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+

+   [Contents]

+
+

7.3.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.3.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. create header and source files with a declaration in the former and +definition of a variable/function in the latter +
  2. declare type aliases to introduce a type with an alternative name ‘using +std::string;’ +
  3. write a forward template declaration +
+ +
+

+   [Contents]

+
+

7.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.3.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.3.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + +

See concepts. +

+

See user-defined-literals. +

+
+

+   [Contents]

+
+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

7.4.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

7.4.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.4.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.4.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.4.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

7.5.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

7.5.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

7.5.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

7.5.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ +object model: declarations] +

+
+

+   [Contents]

+
+

7.5.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

7.5.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.5.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.5.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.5.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

7.5.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

7.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

7.6.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+

+   [Contents]

+
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.6.5.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

7.8 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

7.8.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

7.8.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

7.8.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

7.8.1.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.8.2.1 Background/Required Knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

7.8.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

7.8.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.8.2.4 Points to cover

+

This section lists important details for each point. +

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

7.8.3 Advanced

+ +
+

+   [Contents]

+
+

7.9.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+ +
+

+   [Contents]

+
+

7.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

C++ offers a type safe way of passing around errors, contrary to the +C-style of error handling, by this, we prevent bugs when passing error +codes. Furthermore, error handling with error codes is more commonly +used than exception handling, which only should be used in exceptional +situations and in some environments is not feasible at all, e.g., in +embedded or performance critical software. +

+
+

+   [Contents]

+
+

7.9.3 Topic introduction

+

Very brief introduction to the topic. +

+

C++ offers std::error_code, which encapsulates error codes in a +type safe way. This topic describes how to use these error codes. +

+
+

+   [Contents]

+
+

7.9.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain +the message of the error code or check if an error occurred. +
  2. distinguish between the different categories and make justified +decisions when to use which +
+ +
+

+   [Contents]

+
+

7.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

7.9.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.9.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.9.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. create an error_code and design API that work with +std:error_code +
  2. write code that utilizes std::error_category +
  3. explain the difference between C-style error handling with errno and +std::error_code +
  4. make effective use of the interface of std::error_code +
+ +
+

+   [Contents]

+
+

7.9.5.3 Caveats

+ + +
+

+   [Contents]

+
+

7.9.5.4 Points to cover

+ + +
+

+   [Contents]

+
+

7.9.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + +
+

+   [Contents]

+
+

7.9.7 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+ +
+

+   [Contents]

+
+

7.9.8 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Exception handling is used to be able to continue the program in case of +exceptional situations (like requesting a ridiculous amount of memory: +bad_alloc). +

+
+

+   [Contents]

+
+

7.9.9 Topic introduction

+

Very brief introduction to the topic. +

+

There are other forms of handling difficult situations, but here we +concentrate on exception handling and the peculiarities/characteristics +of it. Because there are different forms, we should know when to use +which type of handling special situations. +

+
+

+   [Contents]

+
+

7.9.10.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.9.10.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Explain how some std:: calls may cause an exception +
  2. Discern the different standard exception types +
  3. Write simple try … except code (e.g., out of memory, vector at +indexing) +
  4. Explain on a “simplified” conceptual level what happens when an +exception is thrown and is bubbled up through the callers until it is +caught +
+ +
+

+   [Contents]

+
+

7.9.10.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

7.9.10.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

7.9.11.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

7.9.11.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Explain the four different exception guarantees +
  2. Explain the exception guarantees that the standard library containers +offer. +
  3. Explain what happens when a exception is thrown in constructor +
+ +
+

+   [Contents]

+
+

7.9.11.3 Caveats

+ + +
+

+   [Contents]

+
+

7.9.11.4 Points to cover

+ + +
+

+   [Contents]

+
+

7.10.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+ +
+

+   [Contents]

+
+

7.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Programs can run in a normal state or erroneous state. Students should +be able to identify different types of erroneous state and how to best +handle them. +

+
+

+   [Contents]

+
+

7.10.3 Topic introduction

+

Very brief introduction to the topic. +

+

This topic is an umbrella topic that refers to the different topics for +types of errors and error handling. +

+
+

+   [Contents]

+
+

7.10.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

7.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Describe different kinds of errors and exceptional situations that +require different approaches of error handling. +
  2. Provide some examples of the different error categories. +
  3. Identify potential erroneous code sections and attribute them to +different error categories. +
+ +
+

+   [Contents]

+
+

7.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+

+   [Contents]

+
+

7.10.4.4 Points to cover

+

This section lists important details for each point. +

+

Errors can happen at different times during software lifetime. +

+ + +

There are different types of errors +

+ + +
+

+   [Contents]

+
+

7.10.5.1 Background/Required Knowledge

+ +
+

+   [Contents]

+
+

7.10.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. pick the right error handling approach for a given problem. +
  2. enumerate different error handling strategies. +
  3. make a clear distinction between error-handling code and normal-case +handling code +
+ +
+

+   [Contents]

+
+

7.10.5.3 Caveats

+ + +
+

+   [Contents]

+
+

7.10.5.4 Points to cover

+ + +
+

+   [Contents]

+
+

7.10.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.5/guidelines.epub b/0.0.5/guidelines.epub new file mode 100644 index 00000000..d893c99c Binary files /dev/null and b/0.0.5/guidelines.epub differ diff --git a/0.0.5/html/images/cpp_logo.png b/0.0.5/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.5/html/images/cpp_logo.png differ diff --git a/0.0.5/html/index.html b/0.0.5/html/index.html new file mode 100644 index 00000000..9fdd6e6e --- /dev/null +++ b/0.0.5/html/index.html @@ -0,0 +1,1430 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.5

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.5/html [later to be https://cplusplus.github.io/SG20/0.0.5/html?]

  2. +
  3. EPUB format: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.5/guidelines.epub [later to be https:/cplusplus.github.io/SG20/0.0.5/guidelines.epub?]

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.5/html_split/ [later to be https://cplusplus.github.io/SG20/0.0.5/html_split/?] [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/ver. For example, version v0.1.0 (assuming that this version exists) would be available at [later to be https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/v0.1.0?].

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics. [Note: Can I suggest that we use the term “area” or “unit” instead of “module”? I think that these other choices are better and also avoid any potential confusion over what is meant by “module” (i.e., C++ term versus plain English term).]

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational. This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it. [Note: Isn’t this just “novice”/“beginner”?]

  • +
  • main. This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved. [Note: The term “main” is not very descriptive/helpful. Could I suggest using “intermediate”?]

  • +
  • advanced. This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.2.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.2.4 Foundational: Using UDLs

+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.2.4.4 Points to cover

+

This section lists important details for each point.

+

8.2.5 Main: implementing UDLs

+

8.2.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them.

+

8.3.4 Foundational: Using and defining functions with default arguments

+

8.3.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.3.4.2 Student outcomes

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.3.4.3 Caveats

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.3.4.4 Points to cover

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.3.5 Main: implementing *

+

8.3.5.1 Background/required knowledge

+
    +
  • All of the above.
  • +
+

8.3.5.2 Student outcomes

+

A student should be able to:

+

8.3.5.3 Caveats

+

8.3.5.4 Points to cover

+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.5.1 Foundational: Writing requires-expressions

+

8.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.5.1.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.5.1.4 Points to cover

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.5.2 Main: Advanced requirements

+

8.5.2.1 Background/required knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.5.2.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.5.2.3 Caveats

+

8.5.2.4 Points to cover

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.5.3 Advanced

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+vulder
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.5/html_split/Advanced.html b/0.0.5/html_split/Advanced.html new file mode 100644 index 00000000..c4d659ae --- /dev/null +++ b/0.0.5/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.5/html_split/Background_002fRequired-Knowledge.html b/0.0.5/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..d3ee1856 --- /dev/null +++ b/0.0.5/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,65 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] +* explain what an object is? +[C++ object +model: objects], +[C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.5/html_split/Background_002frequired-knowledge.html b/0.0.5/html_split/Background_002frequired-knowledge.html new file mode 100644 index 00000000..79fd94db --- /dev/null +++ b/0.0.5/html_split/Background_002frequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5.1 Background/required knowledge

+ + + + + + + diff --git a/0.0.5/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.5/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.5/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.5/html_split/Building.html b/0.0.5/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.5/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.5/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.5/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..6d7350cc --- /dev/null +++ b/0.0.5/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.5/html_split/Caveats.html b/0.0.5/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.5/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.5/html_split/Compilation-Model.html b/0.0.5/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.5/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.5/html_split/Compile_002dTime-Computation.html b/0.0.5/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.5/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.5/html_split/Context-and-Aim-of-This-Guide.html b/0.0.5/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.5/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.5/html_split/Contributing-to-This-Document.html b/0.0.5/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.5/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.5/html_split/Contributors.html b/0.0.5/html_split/Contributors.html new file mode 100644 index 00000000..8adb4b17 --- /dev/null +++ b/0.0.5/html_split/Contributors.html @@ -0,0 +1,58 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+vulder
+
+ + + + + diff --git a/0.0.5/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.5/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..c8c9fcd3 --- /dev/null +++ b/0.0.5/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.5/html_split/Disclaimer.html b/0.0.5/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.5/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.5/html_split/Error-Handling.html b/0.0.5/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.5/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.5/html_split/Examples-of-Course-Curricula.html b/0.0.5/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.5/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.5/html_split/External-ie-Non-Standard-Libraries.html b/0.0.5/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.5/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.5/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.5/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.5/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.5/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.5/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.5/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Foundational-Using-UDLs.html b/0.0.5/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..adb461e8 --- /dev/null +++ b/0.0.5/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.5/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..e37a992c --- /dev/null +++ b/0.0.5/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.5/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.5/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..6846c6e7 --- /dev/null +++ b/0.0.5/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Functions-default-argument.html b/0.0.5/html_split/Functions-default-argument.html new file mode 100644 index 00000000..2571ca9e --- /dev/null +++ b/0.0.5/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.5/html_split/Functions-user_002ddefined-literals.html b/0.0.5/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..7e41de9c --- /dev/null +++ b/0.0.5/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,66 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Functions.html b/0.0.5/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.5/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.5/html_split/Generic-Programming-Templates.html b/0.0.5/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.5/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.5/html_split/Glossary.html b/0.0.5/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.5/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.5/html_split/How-To-Contribute.html b/0.0.5/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.5/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.5/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.5/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.5/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.5/html_split/License.html b/0.0.5/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.5/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.5/html_split/Main-Advanced-requirements.html b/0.0.5/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..6c4ac0e4 --- /dev/null +++ b/0.0.5/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Main-Contracts-and-static_005fassert.html b/0.0.5/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.5/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.5/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.5/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Main-implementing-UDLs.html b/0.0.5/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..1f6f3816 --- /dev/null +++ b/0.0.5/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.5/html_split/Main-implementing-_002a.html b/0.0.5/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..b661f2d1 --- /dev/null +++ b/0.0.5/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.5/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.5/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..f81a34e9 --- /dev/null +++ b/0.0.5/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.5/html_split/Module-name-Requires-Expressions.html b/0.0.5/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..8bab76c8 --- /dev/null +++ b/0.0.5/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.5/html_split/Motivation.html b/0.0.5/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.5/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.5/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.5/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..c3c4fda9 --- /dev/null +++ b/0.0.5/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,84 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.5/html +[later to be https://cplusplus.github.io/SG20/0.0.5/html?] + +
  2. EPUB format: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.5/guidelines.epub +[later to be +https:/cplusplus.github.io/SG20/0.0.5/guidelines.epub?] + +
  3. online (HTML) format, split across multiple HTML documents: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.5/html_split/ +[later to be https://cplusplus.github.io/SG20/0.0.5/html_split/?] +[Note: The support for this format needs more work (in order to +beautify and fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/ver. +For example, version v0.1.0 (assuming that this version exists) would be +available at [later to be +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/v0.1.0?]. +

+ + + + + diff --git a/0.0.5/html_split/Organization-of-This-Document.html b/0.0.5/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..3e489855 --- /dev/null +++ b/0.0.5/html_split/Organization-of-This-Document.html @@ -0,0 +1,101 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. [Note: Can I suggest that we use the term +“area” or “unit” instead of “module”? I think that these other +choices are better and also avoid any potential confusion over what is +meant by “module” (i.e., C++ term versus plain English term).] +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.5/html_split/Overview.html b/0.0.5/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.5/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.5/html_split/Points-to-cover.html b/0.0.5/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.5/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.5/html_split/Preprocessor.html b/0.0.5/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.5/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.5/html_split/References-on-Learning-Outcomes.html b/0.0.5/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.5/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.5/html_split/References.html b/0.0.5/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.5/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.5/html_split/Software-Design.html b/0.0.5/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.5/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.5/html_split/Standard-Library.html b/0.0.5/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.5/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.5/html_split/Student-outcomes.html b/0.0.5/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.5/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.5/html_split/Summary-of-Modules-and-Topics.html b/0.0.5/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.5/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.5/html_split/Testing-and-Debugging.html b/0.0.5/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.5/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.5/html_split/Tooling.html b/0.0.5/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.5/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.5/html_split/Topic-introduction.html b/0.0.5/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.5/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.5/html_split/Use-of-This-Document.html b/0.0.5/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.5/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.5/html_split/User_002dDefined-Types-Classes.html b/0.0.5/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.5/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.5/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.5/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.5/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.5/html_split/_0023advanced.html b/0.0.5/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.5/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.5/html_split/_0023advanced_002d1.html b/0.0.5/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.5/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.5/html_split/_0023advanced_002d2.html b/0.0.5/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.5/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.5/html_split/_0023advanced_002d3.html b/0.0.5/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.5/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..8f0570c9 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.5/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.5/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.5/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.5/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.5/html_split/_0023building.html b/0.0.5/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.5/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.5/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.5/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.5/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.5/html_split/_0023caveats.html b/0.0.5/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.5/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.5/html_split/_0023caveats_002d1.html b/0.0.5/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.5/html_split/_0023caveats_002d2.html b/0.0.5/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.5/html_split/_0023caveats_002d3.html b/0.0.5/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.5/html_split/_0023caveats_002d4.html b/0.0.5/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.5/html_split/_0023caveats_002d5.html b/0.0.5/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.5/html_split/_0023caveats_002d6.html b/0.0.5/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.5/html_split/_0023caveats_002d7.html b/0.0.5/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.5/html_split/_0023caveats_002d8.html b/0.0.5/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.5/html_split/_0023caveats_002d9.html b/0.0.5/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.5/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.5/html_split/_0023compilation_002dmodel.html b/0.0.5/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.5/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.5/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.5/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.5/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.5/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.5/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.5/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.5/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.5/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.5/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.5/html_split/_0023contributors.html b/0.0.5/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.5/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.5/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.5/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.5/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.5/html_split/_0023disclaimer.html b/0.0.5/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.5/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.5/html_split/_0023error_002dhandling.html b/0.0.5/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.5/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.5/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.5/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.5/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.5/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.5/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.5/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.5/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.5/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.5/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.5/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.5/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.5/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.5/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.5/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.5/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.5/html_split/_0023foundational_002dusing_002dudls.html b/0.0.5/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.5/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.5/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.5/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.5/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.5/html_split/_0023functions.html b/0.0.5/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.5/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.5/html_split/_0023functions_002ddefault_002dargument.html b/0.0.5/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.5/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.5/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.5/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.5/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.5/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.5/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.5/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.5/html_split/_0023glossary.html b/0.0.5/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.5/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.5/html_split/_0023how_002dto_002dcontribute.html b/0.0.5/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.5/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.5/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.5/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.5/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.5/html_split/_0023license.html b/0.0.5/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.5/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.5/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.5/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.5/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.5/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.5/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.5/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.5/html_split/_0023main_002dimplementing.html b/0.0.5/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.5/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.5/html_split/_0023main_002dimplementing_002dudls.html b/0.0.5/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.5/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.5/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.5/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.5/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.5/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.5/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.5/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.5/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.5/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.5/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.5/html_split/_0023motivation.html b/0.0.5/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.5/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.5/html_split/_0023motivation_002d1.html b/0.0.5/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.5/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.5/html_split/_0023motivation_002d2.html b/0.0.5/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.5/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.5/html_split/_0023motivation_002d3.html b/0.0.5/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.5/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.5/html_split/_0023motivation_002d4.html b/0.0.5/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.5/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.5/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.5/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.5/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.5/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.5/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.5/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.5/html_split/_0023overview.html b/0.0.5/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.5/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.5/html_split/_0023overview_002d1.html b/0.0.5/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.5/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.5/html_split/_0023overview_002d2.html b/0.0.5/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.5/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.5/html_split/_0023overview_002d3.html b/0.0.5/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.5/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.5/html_split/_0023overview_002d4.html b/0.0.5/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.5/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover.html b/0.0.5/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.5/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.5/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.5/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.5/html_split/_0023preprocessor.html b/0.0.5/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.5/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.5/html_split/_0023references.html b/0.0.5/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.5/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.5/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.5/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.5/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.5/html_split/_0023software_002ddesign.html b/0.0.5/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.5/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.5/html_split/_0023standard_002dlibrary.html b/0.0.5/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.5/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes.html b/0.0.5/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d1.html b/0.0.5/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d2.html b/0.0.5/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d3.html b/0.0.5/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d4.html b/0.0.5/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d5.html b/0.0.5/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d6.html b/0.0.5/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d7.html b/0.0.5/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d8.html b/0.0.5/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.5/html_split/_0023student_002doutcomes_002d9.html b/0.0.5/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.5/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.5/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.5/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.5/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.5/html_split/_0023testing_002dand_002ddebugging.html b/0.0.5/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.5/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.5/html_split/_0023tooling.html b/0.0.5/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.5/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.5/html_split/_0023topic_002dintroduction.html b/0.0.5/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.5/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.5/html_split/_0023topic_002dintroduction_002d1.html b/0.0.5/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.5/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.5/html_split/_0023topic_002dintroduction_002d2.html b/0.0.5/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.5/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.5/html_split/_0023topic_002dintroduction_002d3.html b/0.0.5/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.5/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.5/html_split/_0023topic_002dintroduction_002d4.html b/0.0.5/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.5/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.5/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.5/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.5/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.5/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.5/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.5/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.5/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.5/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.5/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.5/html_split/index.html b/0.0.5/html_split/index.html new file mode 100644 index 00000000..c4e5ff06 --- /dev/null +++ b/0.0.5/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.5/html_split/unknown_node.html b/0.0.5/html_split/unknown_node.html new file mode 100644 index 00000000..5a652e58 --- /dev/null +++ b/0.0.5/html_split/unknown_node.html @@ -0,0 +1,763 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.2.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. +[C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.2.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.3.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.4.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.3.4.3 Caveats

+ + +
+

+   [Contents]

+
+

8.3.4.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.3.5.2 Student outcomes

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.3.5.3 Caveats

+ +
+

+   [Contents]

+
+

8.3.5.4 Points to cover

+ +
+

+   [Contents]

+
+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.5.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.5.1.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.5.1.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.5.2.1 Background/required knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.2.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.5.2.3 Caveats

+ +
+

+   [Contents]

+
+

8.5.2.4 Points to cover

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.5.3 Advanced

+ +
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.6/guidelines.epub b/0.0.6/guidelines.epub new file mode 100644 index 00000000..e7327a3b Binary files /dev/null and b/0.0.6/guidelines.epub differ diff --git a/0.0.6/html/images/cpp_logo.png b/0.0.6/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.6/html/images/cpp_logo.png differ diff --git a/0.0.6/html/index.html b/0.0.6/html/index.html new file mode 100644 index 00000000..1f19e207 --- /dev/null +++ b/0.0.6/html/index.html @@ -0,0 +1,1430 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version X.Y.Z

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.6/html [later to be https://cplusplus.github.io/SG20/0.0.6/html?]

  2. +
  3. EPUB format: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.6/guidelines.epub [later to be https:/cplusplus.github.io/SG20/0.0.6/guidelines.epub?]

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.6/html_split/ [later to be https://cplusplus.github.io/SG20/0.0.6/html_split/?] [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/ver. For example, version v0.1.0 (assuming that this version exists) would be available at [later to be https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/v0.1.0?].

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics. [Note: Can I suggest that we use the term “area” or “unit” instead of “module”? I think that these other choices are better and also avoid any potential confusion over what is meant by “module” (i.e., C++ term versus plain English term).]

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational. This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it. [Note: Isn’t this just “novice”/“beginner”?]

  • +
  • main. This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved. [Note: The term “main” is not very descriptive/helpful. Could I suggest using “intermediate”?]

  • +
  • advanced. This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.2.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.2.4 Foundational: Using UDLs

+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.2.4.4 Points to cover

+

This section lists important details for each point.

+

8.2.5 Main: implementing UDLs

+

8.2.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them.

+

8.3.4 Foundational: Using and defining functions with default arguments

+

8.3.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.3.4.2 Student outcomes

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.3.4.3 Caveats

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.3.4.4 Points to cover

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.3.5 Main: implementing *

+

8.3.5.1 Background/required knowledge

+
    +
  • All of the above.
  • +
+

8.3.5.2 Student outcomes

+

A student should be able to:

+

8.3.5.3 Caveats

+

8.3.5.4 Points to cover

+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.5.1 Foundational: Writing requires-expressions

+

8.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.5.1.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.5.1.4 Points to cover

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.5.2 Main: Advanced requirements

+

8.5.2.1 Background/required knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.5.2.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.5.2.3 Caveats

+

8.5.2.4 Points to cover

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.5.3 Advanced

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+vulder
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.6/html_split/Advanced.html b/0.0.6/html_split/Advanced.html new file mode 100644 index 00000000..c4d659ae --- /dev/null +++ b/0.0.6/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.6/html_split/Background_002fRequired-Knowledge.html b/0.0.6/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..d3ee1856 --- /dev/null +++ b/0.0.6/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,65 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] +* explain what an object is? +[C++ object +model: objects], +[C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.6/html_split/Background_002frequired-knowledge.html b/0.0.6/html_split/Background_002frequired-knowledge.html new file mode 100644 index 00000000..79fd94db --- /dev/null +++ b/0.0.6/html_split/Background_002frequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5.1 Background/required knowledge

+ + + + + + + diff --git a/0.0.6/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.6/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.6/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.6/html_split/Building.html b/0.0.6/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.6/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.6/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.6/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..6d7350cc --- /dev/null +++ b/0.0.6/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.6/html_split/Caveats.html b/0.0.6/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.6/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.6/html_split/Compilation-Model.html b/0.0.6/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.6/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.6/html_split/Compile_002dTime-Computation.html b/0.0.6/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.6/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.6/html_split/Context-and-Aim-of-This-Guide.html b/0.0.6/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.6/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.6/html_split/Contributing-to-This-Document.html b/0.0.6/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.6/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.6/html_split/Contributors.html b/0.0.6/html_split/Contributors.html new file mode 100644 index 00000000..8adb4b17 --- /dev/null +++ b/0.0.6/html_split/Contributors.html @@ -0,0 +1,58 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+vulder
+
+ + + + + diff --git a/0.0.6/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.6/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..c8c9fcd3 --- /dev/null +++ b/0.0.6/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.6/html_split/Disclaimer.html b/0.0.6/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.6/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.6/html_split/Error-Handling.html b/0.0.6/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.6/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.6/html_split/Examples-of-Course-Curricula.html b/0.0.6/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.6/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.6/html_split/External-ie-Non-Standard-Libraries.html b/0.0.6/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.6/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.6/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.6/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.6/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.6/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.6/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.6/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Foundational-Using-UDLs.html b/0.0.6/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..adb461e8 --- /dev/null +++ b/0.0.6/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.6/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..e37a992c --- /dev/null +++ b/0.0.6/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.6/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.6/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..6846c6e7 --- /dev/null +++ b/0.0.6/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Functions-default-argument.html b/0.0.6/html_split/Functions-default-argument.html new file mode 100644 index 00000000..2571ca9e --- /dev/null +++ b/0.0.6/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.6/html_split/Functions-user_002ddefined-literals.html b/0.0.6/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..7e41de9c --- /dev/null +++ b/0.0.6/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,66 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Functions.html b/0.0.6/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.6/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.6/html_split/Generic-Programming-Templates.html b/0.0.6/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.6/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.6/html_split/Glossary.html b/0.0.6/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.6/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.6/html_split/How-To-Contribute.html b/0.0.6/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.6/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.6/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.6/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.6/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.6/html_split/License.html b/0.0.6/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.6/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.6/html_split/Main-Advanced-requirements.html b/0.0.6/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..6c4ac0e4 --- /dev/null +++ b/0.0.6/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Main-Contracts-and-static_005fassert.html b/0.0.6/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.6/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.6/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.6/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Main-implementing-UDLs.html b/0.0.6/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..1f6f3816 --- /dev/null +++ b/0.0.6/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.6/html_split/Main-implementing-_002a.html b/0.0.6/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..b661f2d1 --- /dev/null +++ b/0.0.6/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.6/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.6/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..f81a34e9 --- /dev/null +++ b/0.0.6/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.6/html_split/Module-name-Requires-Expressions.html b/0.0.6/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..8bab76c8 --- /dev/null +++ b/0.0.6/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.6/html_split/Motivation.html b/0.0.6/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.6/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.6/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.6/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..37fb345a --- /dev/null +++ b/0.0.6/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,84 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.6/html +[later to be https://cplusplus.github.io/SG20/0.0.6/html?] + +
  2. EPUB format: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.6/guidelines.epub +[later to be +https:/cplusplus.github.io/SG20/0.0.6/guidelines.epub?] + +
  3. online (HTML) format, split across multiple HTML documents: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.6/html_split/ +[later to be https://cplusplus.github.io/SG20/0.0.6/html_split/?] +[Note: The support for this format needs more work (in order to +beautify and fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/ver. +For example, version v0.1.0 (assuming that this version exists) would be +available at [later to be +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/v0.1.0?]. +

+ + + + + diff --git a/0.0.6/html_split/Organization-of-This-Document.html b/0.0.6/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..3e489855 --- /dev/null +++ b/0.0.6/html_split/Organization-of-This-Document.html @@ -0,0 +1,101 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. [Note: Can I suggest that we use the term +“area” or “unit” instead of “module”? I think that these other +choices are better and also avoid any potential confusion over what is +meant by “module” (i.e., C++ term versus plain English term).] +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.6/html_split/Overview.html b/0.0.6/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.6/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.6/html_split/Points-to-cover.html b/0.0.6/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.6/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.6/html_split/Preprocessor.html b/0.0.6/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.6/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.6/html_split/References-on-Learning-Outcomes.html b/0.0.6/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.6/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.6/html_split/References.html b/0.0.6/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.6/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.6/html_split/Software-Design.html b/0.0.6/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.6/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.6/html_split/Standard-Library.html b/0.0.6/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.6/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.6/html_split/Student-outcomes.html b/0.0.6/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.6/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.6/html_split/Summary-of-Modules-and-Topics.html b/0.0.6/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.6/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.6/html_split/Testing-and-Debugging.html b/0.0.6/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.6/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.6/html_split/Tooling.html b/0.0.6/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.6/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.6/html_split/Topic-introduction.html b/0.0.6/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.6/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.6/html_split/Use-of-This-Document.html b/0.0.6/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.6/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.6/html_split/User_002dDefined-Types-Classes.html b/0.0.6/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.6/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.6/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.6/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.6/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.6/html_split/_0023advanced.html b/0.0.6/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.6/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.6/html_split/_0023advanced_002d1.html b/0.0.6/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.6/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.6/html_split/_0023advanced_002d2.html b/0.0.6/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.6/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.6/html_split/_0023advanced_002d3.html b/0.0.6/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.6/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..8f0570c9 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.6/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.6/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.6/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.6/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.6/html_split/_0023building.html b/0.0.6/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.6/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.6/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.6/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.6/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.6/html_split/_0023caveats.html b/0.0.6/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.6/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.6/html_split/_0023caveats_002d1.html b/0.0.6/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.6/html_split/_0023caveats_002d2.html b/0.0.6/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.6/html_split/_0023caveats_002d3.html b/0.0.6/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.6/html_split/_0023caveats_002d4.html b/0.0.6/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.6/html_split/_0023caveats_002d5.html b/0.0.6/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.6/html_split/_0023caveats_002d6.html b/0.0.6/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.6/html_split/_0023caveats_002d7.html b/0.0.6/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.6/html_split/_0023caveats_002d8.html b/0.0.6/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.6/html_split/_0023caveats_002d9.html b/0.0.6/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.6/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.6/html_split/_0023compilation_002dmodel.html b/0.0.6/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.6/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.6/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.6/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.6/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.6/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.6/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.6/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.6/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.6/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.6/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.6/html_split/_0023contributors.html b/0.0.6/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.6/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.6/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.6/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.6/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.6/html_split/_0023disclaimer.html b/0.0.6/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.6/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.6/html_split/_0023error_002dhandling.html b/0.0.6/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.6/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.6/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.6/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.6/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.6/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.6/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.6/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.6/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.6/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.6/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.6/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.6/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.6/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.6/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.6/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.6/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.6/html_split/_0023foundational_002dusing_002dudls.html b/0.0.6/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.6/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.6/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.6/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.6/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.6/html_split/_0023functions.html b/0.0.6/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.6/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.6/html_split/_0023functions_002ddefault_002dargument.html b/0.0.6/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.6/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.6/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.6/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.6/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.6/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.6/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.6/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.6/html_split/_0023glossary.html b/0.0.6/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.6/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.6/html_split/_0023how_002dto_002dcontribute.html b/0.0.6/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.6/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.6/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.6/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.6/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.6/html_split/_0023license.html b/0.0.6/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.6/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.6/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.6/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.6/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.6/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.6/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.6/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.6/html_split/_0023main_002dimplementing.html b/0.0.6/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.6/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.6/html_split/_0023main_002dimplementing_002dudls.html b/0.0.6/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.6/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.6/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.6/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.6/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.6/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.6/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.6/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.6/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.6/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.6/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.6/html_split/_0023motivation.html b/0.0.6/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.6/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.6/html_split/_0023motivation_002d1.html b/0.0.6/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.6/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.6/html_split/_0023motivation_002d2.html b/0.0.6/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.6/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.6/html_split/_0023motivation_002d3.html b/0.0.6/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.6/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.6/html_split/_0023motivation_002d4.html b/0.0.6/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.6/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.6/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.6/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.6/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.6/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.6/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.6/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.6/html_split/_0023overview.html b/0.0.6/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.6/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.6/html_split/_0023overview_002d1.html b/0.0.6/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.6/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.6/html_split/_0023overview_002d2.html b/0.0.6/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.6/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.6/html_split/_0023overview_002d3.html b/0.0.6/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.6/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.6/html_split/_0023overview_002d4.html b/0.0.6/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.6/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover.html b/0.0.6/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.6/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.6/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.6/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.6/html_split/_0023preprocessor.html b/0.0.6/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.6/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.6/html_split/_0023references.html b/0.0.6/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.6/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.6/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.6/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.6/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.6/html_split/_0023software_002ddesign.html b/0.0.6/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.6/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.6/html_split/_0023standard_002dlibrary.html b/0.0.6/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.6/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes.html b/0.0.6/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d1.html b/0.0.6/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d2.html b/0.0.6/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d3.html b/0.0.6/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d4.html b/0.0.6/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d5.html b/0.0.6/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d6.html b/0.0.6/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d7.html b/0.0.6/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d8.html b/0.0.6/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.6/html_split/_0023student_002doutcomes_002d9.html b/0.0.6/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.6/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.6/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.6/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.6/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.6/html_split/_0023testing_002dand_002ddebugging.html b/0.0.6/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.6/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.6/html_split/_0023tooling.html b/0.0.6/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.6/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.6/html_split/_0023topic_002dintroduction.html b/0.0.6/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.6/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.6/html_split/_0023topic_002dintroduction_002d1.html b/0.0.6/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.6/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.6/html_split/_0023topic_002dintroduction_002d2.html b/0.0.6/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.6/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.6/html_split/_0023topic_002dintroduction_002d3.html b/0.0.6/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.6/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.6/html_split/_0023topic_002dintroduction_002d4.html b/0.0.6/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.6/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.6/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.6/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.6/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.6/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.6/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.6/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.6/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.6/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.6/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.6/html_split/index.html b/0.0.6/html_split/index.html new file mode 100644 index 00000000..c4e5ff06 --- /dev/null +++ b/0.0.6/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.6/html_split/unknown_node.html b/0.0.6/html_split/unknown_node.html new file mode 100644 index 00000000..5a652e58 --- /dev/null +++ b/0.0.6/html_split/unknown_node.html @@ -0,0 +1,763 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.2.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. +[C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.2.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.3.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.4.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.3.4.3 Caveats

+ + +
+

+   [Contents]

+
+

8.3.4.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.3.5.2 Student outcomes

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.3.5.3 Caveats

+ +
+

+   [Contents]

+
+

8.3.5.4 Points to cover

+ +
+

+   [Contents]

+
+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.5.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.5.1.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.5.1.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.5.2.1 Background/required knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.2.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.5.2.3 Caveats

+ +
+

+   [Contents]

+
+

8.5.2.4 Points to cover

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.5.3 Advanced

+ +
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.7/guidelines.epub b/0.0.7/guidelines.epub new file mode 100644 index 00000000..0fa0ec66 Binary files /dev/null and b/0.0.7/guidelines.epub differ diff --git a/0.0.7/html/images/cpp_logo.png b/0.0.7/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.7/html/images/cpp_logo.png differ diff --git a/0.0.7/html/index.html b/0.0.7/html/index.html new file mode 100644 index 00000000..e15f98dc --- /dev/null +++ b/0.0.7/html/index.html @@ -0,0 +1,1430 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.7

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.7/html [later to be https://cplusplus.github.io/SG20/0.0.7/html?]

  2. +
  3. EPUB format: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.7/guidelines.epub [later to be https:/cplusplus.github.io/SG20/0.0.7/guidelines.epub?]

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.7/html_split/ [later to be https://cplusplus.github.io/SG20/0.0.7/html_split/?] [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/ver. For example, version v0.1.0 (assuming that this version exists) would be available at [later to be https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/v0.1.0?].

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics. [Note: Can I suggest that we use the term “area” or “unit” instead of “module”? I think that these other choices are better and also avoid any potential confusion over what is meant by “module” (i.e., C++ term versus plain English term).]

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational. This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it. [Note: Isn’t this just “novice”/“beginner”?]

  • +
  • main. This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved. [Note: The term “main” is not very descriptive/helpful. Could I suggest using “intermediate”?]

  • +
  • advanced. This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.2.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.2.4 Foundational: Using UDLs

+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.2.4.4 Points to cover

+

This section lists important details for each point.

+

8.2.5 Main: implementing UDLs

+

8.2.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them.

+

8.3.4 Foundational: Using and defining functions with default arguments

+

8.3.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.3.4.2 Student outcomes

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.3.4.3 Caveats

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.3.4.4 Points to cover

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.3.5 Main: implementing *

+

8.3.5.1 Background/required knowledge

+
    +
  • All of the above.
  • +
+

8.3.5.2 Student outcomes

+

A student should be able to:

+

8.3.5.3 Caveats

+

8.3.5.4 Points to cover

+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.5.1 Foundational: Writing requires-expressions

+

8.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.5.1.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.5.1.4 Points to cover

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.5.2 Main: Advanced requirements

+

8.5.2.1 Background/required knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.5.2.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.5.2.3 Caveats

+

8.5.2.4 Points to cover

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.5.3 Advanced

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+vulder
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.7/html_split/Advanced.html b/0.0.7/html_split/Advanced.html new file mode 100644 index 00000000..c4d659ae --- /dev/null +++ b/0.0.7/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.7/html_split/Background_002fRequired-Knowledge.html b/0.0.7/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..d3ee1856 --- /dev/null +++ b/0.0.7/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,65 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] +* explain what an object is? +[C++ object +model: objects], +[C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.7/html_split/Background_002frequired-knowledge.html b/0.0.7/html_split/Background_002frequired-knowledge.html new file mode 100644 index 00000000..79fd94db --- /dev/null +++ b/0.0.7/html_split/Background_002frequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5.1 Background/required knowledge

+ + + + + + + diff --git a/0.0.7/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.7/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.7/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.7/html_split/Building.html b/0.0.7/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.7/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.7/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.7/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..6d7350cc --- /dev/null +++ b/0.0.7/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.7/html_split/Caveats.html b/0.0.7/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.7/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.7/html_split/Compilation-Model.html b/0.0.7/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.7/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.7/html_split/Compile_002dTime-Computation.html b/0.0.7/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.7/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.7/html_split/Context-and-Aim-of-This-Guide.html b/0.0.7/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.7/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.7/html_split/Contributing-to-This-Document.html b/0.0.7/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.7/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.7/html_split/Contributors.html b/0.0.7/html_split/Contributors.html new file mode 100644 index 00000000..8adb4b17 --- /dev/null +++ b/0.0.7/html_split/Contributors.html @@ -0,0 +1,58 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+vulder
+
+ + + + + diff --git a/0.0.7/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.7/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..c8c9fcd3 --- /dev/null +++ b/0.0.7/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.7/html_split/Disclaimer.html b/0.0.7/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.7/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.7/html_split/Error-Handling.html b/0.0.7/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.7/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.7/html_split/Examples-of-Course-Curricula.html b/0.0.7/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.7/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.7/html_split/External-ie-Non-Standard-Libraries.html b/0.0.7/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.7/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.7/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.7/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.7/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.7/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.7/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.7/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Foundational-Using-UDLs.html b/0.0.7/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..adb461e8 --- /dev/null +++ b/0.0.7/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.7/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..e37a992c --- /dev/null +++ b/0.0.7/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.7/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.7/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..6846c6e7 --- /dev/null +++ b/0.0.7/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Functions-default-argument.html b/0.0.7/html_split/Functions-default-argument.html new file mode 100644 index 00000000..2571ca9e --- /dev/null +++ b/0.0.7/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.7/html_split/Functions-user_002ddefined-literals.html b/0.0.7/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..7e41de9c --- /dev/null +++ b/0.0.7/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,66 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Functions.html b/0.0.7/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.7/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.7/html_split/Generic-Programming-Templates.html b/0.0.7/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.7/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.7/html_split/Glossary.html b/0.0.7/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.7/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.7/html_split/How-To-Contribute.html b/0.0.7/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.7/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.7/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.7/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.7/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.7/html_split/License.html b/0.0.7/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.7/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.7/html_split/Main-Advanced-requirements.html b/0.0.7/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..6c4ac0e4 --- /dev/null +++ b/0.0.7/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Main-Contracts-and-static_005fassert.html b/0.0.7/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.7/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.7/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.7/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Main-implementing-UDLs.html b/0.0.7/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..1f6f3816 --- /dev/null +++ b/0.0.7/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.7/html_split/Main-implementing-_002a.html b/0.0.7/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..b661f2d1 --- /dev/null +++ b/0.0.7/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.7/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.7/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..f81a34e9 --- /dev/null +++ b/0.0.7/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.7/html_split/Module-name-Requires-Expressions.html b/0.0.7/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..8bab76c8 --- /dev/null +++ b/0.0.7/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.7/html_split/Motivation.html b/0.0.7/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.7/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.7/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.7/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..b3c4560c --- /dev/null +++ b/0.0.7/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,84 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.7/html +[later to be https://cplusplus.github.io/SG20/0.0.7/html?] + +
  2. EPUB format: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.7/guidelines.epub +[later to be +https:/cplusplus.github.io/SG20/0.0.7/guidelines.epub?] + +
  3. online (HTML) format, split across multiple HTML documents: +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/0.0.7/html_split/ +[later to be https://cplusplus.github.io/SG20/0.0.7/html_split/?] +[Note: The support for this format needs more work (in order to +beautify and fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/ver. +For example, version v0.1.0 (assuming that this version exists) would be +available at [later to be +https://mdadams.github.io/sg20_guidelines_for_teaching_cpp/v0.1.0?]. +

+ + + + + diff --git a/0.0.7/html_split/Organization-of-This-Document.html b/0.0.7/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..3e489855 --- /dev/null +++ b/0.0.7/html_split/Organization-of-This-Document.html @@ -0,0 +1,101 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. [Note: Can I suggest that we use the term +“area” or “unit” instead of “module”? I think that these other +choices are better and also avoid any potential confusion over what is +meant by “module” (i.e., C++ term versus plain English term).] +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.7/html_split/Overview.html b/0.0.7/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.7/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.7/html_split/Points-to-cover.html b/0.0.7/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.7/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.7/html_split/Preprocessor.html b/0.0.7/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.7/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.7/html_split/References-on-Learning-Outcomes.html b/0.0.7/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.7/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.7/html_split/References.html b/0.0.7/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.7/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.7/html_split/Software-Design.html b/0.0.7/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.7/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.7/html_split/Standard-Library.html b/0.0.7/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.7/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.7/html_split/Student-outcomes.html b/0.0.7/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.7/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.7/html_split/Summary-of-Modules-and-Topics.html b/0.0.7/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.7/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.7/html_split/Testing-and-Debugging.html b/0.0.7/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.7/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.7/html_split/Tooling.html b/0.0.7/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.7/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.7/html_split/Topic-introduction.html b/0.0.7/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.7/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.7/html_split/Use-of-This-Document.html b/0.0.7/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.7/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.7/html_split/User_002dDefined-Types-Classes.html b/0.0.7/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.7/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.7/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.7/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.7/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.7/html_split/_0023advanced.html b/0.0.7/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.7/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.7/html_split/_0023advanced_002d1.html b/0.0.7/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.7/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.7/html_split/_0023advanced_002d2.html b/0.0.7/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.7/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.7/html_split/_0023advanced_002d3.html b/0.0.7/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.7/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..8f0570c9 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.7/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.7/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.7/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.7/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.7/html_split/_0023building.html b/0.0.7/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.7/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.7/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.7/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.7/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.7/html_split/_0023caveats.html b/0.0.7/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.7/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.7/html_split/_0023caveats_002d1.html b/0.0.7/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.7/html_split/_0023caveats_002d2.html b/0.0.7/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.7/html_split/_0023caveats_002d3.html b/0.0.7/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.7/html_split/_0023caveats_002d4.html b/0.0.7/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.7/html_split/_0023caveats_002d5.html b/0.0.7/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.7/html_split/_0023caveats_002d6.html b/0.0.7/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.7/html_split/_0023caveats_002d7.html b/0.0.7/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.7/html_split/_0023caveats_002d8.html b/0.0.7/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.7/html_split/_0023caveats_002d9.html b/0.0.7/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.7/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.7/html_split/_0023compilation_002dmodel.html b/0.0.7/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.7/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.7/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.7/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.7/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.7/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.7/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.7/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.7/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.7/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.7/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.7/html_split/_0023contributors.html b/0.0.7/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.7/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.7/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.7/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.7/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.7/html_split/_0023disclaimer.html b/0.0.7/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.7/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.7/html_split/_0023error_002dhandling.html b/0.0.7/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.7/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.7/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.7/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.7/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.7/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.7/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.7/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.7/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.7/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.7/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.7/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.7/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.7/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.7/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.7/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.7/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.7/html_split/_0023foundational_002dusing_002dudls.html b/0.0.7/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.7/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.7/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.7/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.7/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.7/html_split/_0023functions.html b/0.0.7/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.7/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.7/html_split/_0023functions_002ddefault_002dargument.html b/0.0.7/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.7/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.7/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.7/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.7/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.7/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.7/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.7/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.7/html_split/_0023glossary.html b/0.0.7/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.7/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.7/html_split/_0023how_002dto_002dcontribute.html b/0.0.7/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.7/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.7/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.7/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.7/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.7/html_split/_0023license.html b/0.0.7/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.7/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.7/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.7/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.7/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.7/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.7/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.7/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.7/html_split/_0023main_002dimplementing.html b/0.0.7/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.7/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.7/html_split/_0023main_002dimplementing_002dudls.html b/0.0.7/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.7/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.7/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.7/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.7/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.7/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.7/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.7/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.7/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.7/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.7/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.7/html_split/_0023motivation.html b/0.0.7/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.7/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.7/html_split/_0023motivation_002d1.html b/0.0.7/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.7/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.7/html_split/_0023motivation_002d2.html b/0.0.7/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.7/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.7/html_split/_0023motivation_002d3.html b/0.0.7/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.7/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.7/html_split/_0023motivation_002d4.html b/0.0.7/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.7/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.7/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.7/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.7/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.7/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.7/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.7/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.7/html_split/_0023overview.html b/0.0.7/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.7/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.7/html_split/_0023overview_002d1.html b/0.0.7/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.7/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.7/html_split/_0023overview_002d2.html b/0.0.7/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.7/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.7/html_split/_0023overview_002d3.html b/0.0.7/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.7/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.7/html_split/_0023overview_002d4.html b/0.0.7/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.7/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover.html b/0.0.7/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.7/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.7/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.7/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.7/html_split/_0023preprocessor.html b/0.0.7/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.7/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.7/html_split/_0023references.html b/0.0.7/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.7/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.7/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.7/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.7/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.7/html_split/_0023software_002ddesign.html b/0.0.7/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.7/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.7/html_split/_0023standard_002dlibrary.html b/0.0.7/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.7/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes.html b/0.0.7/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d1.html b/0.0.7/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d2.html b/0.0.7/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d3.html b/0.0.7/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d4.html b/0.0.7/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d5.html b/0.0.7/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d6.html b/0.0.7/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d7.html b/0.0.7/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d8.html b/0.0.7/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.7/html_split/_0023student_002doutcomes_002d9.html b/0.0.7/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.7/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.7/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.7/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.7/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.7/html_split/_0023testing_002dand_002ddebugging.html b/0.0.7/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.7/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.7/html_split/_0023tooling.html b/0.0.7/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.7/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.7/html_split/_0023topic_002dintroduction.html b/0.0.7/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.7/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.7/html_split/_0023topic_002dintroduction_002d1.html b/0.0.7/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.7/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.7/html_split/_0023topic_002dintroduction_002d2.html b/0.0.7/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.7/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.7/html_split/_0023topic_002dintroduction_002d3.html b/0.0.7/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.7/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.7/html_split/_0023topic_002dintroduction_002d4.html b/0.0.7/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.7/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.7/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.7/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.7/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.7/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.7/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.7/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.7/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.7/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.7/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.7/html_split/index.html b/0.0.7/html_split/index.html new file mode 100644 index 00000000..c4e5ff06 --- /dev/null +++ b/0.0.7/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.7/html_split/unknown_node.html b/0.0.7/html_split/unknown_node.html new file mode 100644 index 00000000..5a652e58 --- /dev/null +++ b/0.0.7/html_split/unknown_node.html @@ -0,0 +1,763 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.2.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. +[C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.2.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.3.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.4.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.3.4.3 Caveats

+ + +
+

+   [Contents]

+
+

8.3.4.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.3.5.2 Student outcomes

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.3.5.3 Caveats

+ +
+

+   [Contents]

+
+

8.3.5.4 Points to cover

+ +
+

+   [Contents]

+
+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.5.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.5.1.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.5.1.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.5.2.1 Background/required knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.2.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.5.2.3 Caveats

+ +
+

+   [Contents]

+
+

8.5.2.4 Points to cover

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.5.3 Advanced

+ +
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/0.0.9/guidelines.epub b/0.0.9/guidelines.epub new file mode 100644 index 00000000..b6b73422 Binary files /dev/null and b/0.0.9/guidelines.epub differ diff --git a/0.0.9/html/images/cpp_logo.png b/0.0.9/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/0.0.9/html/images/cpp_logo.png differ diff --git a/0.0.9/html/index.html b/0.0.9/html/index.html new file mode 100644 index 00000000..64feef84 --- /dev/null +++ b/0.0.9/html/index.html @@ -0,0 +1,1429 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version 0.0.9

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/0.0.9/html

  2. +
  3. EPUB format: https:/cplusplus.github.io/SG20/0.0.9/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/0.0.9/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from others. This document is incomplete. This document likely has at least a few errors.

+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics. [Note: Can I suggest that we use the term “area” or “unit” instead of “module”? I think that these other choices are better and also avoid any potential confusion over what is meant by “module” (i.e., C++ term versus plain English term).]

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational. This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it. [Note: Isn’t this just “novice”/“beginner”?]

  • +
  • main. This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved. [Note: The term “main” is not very descriptive/helpful. Could I suggest using “intermediate”?]

  • +
  • advanced. This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

[NOTE: These topics are taken mostly from the SG20 GitHub repository. They are not intended to be complete in any sense. In fact, by gathering together all topics in one place where they are easily viewed, it is hoped that missing and unbalanced items will be more obvious.]

+

7.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

7.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations and Definitions???
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

7.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

7.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

7.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

7.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

7.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

7.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Classes of Errors???
[?]errno???
[?]Error Codes???
[?]Exception Handling???
+

7.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

7.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

7.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

7.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

7.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

7.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

8 Detailed Information for Modules and Topics

+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

8.1.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

8.1.4 Foundational: How and when are copies made

+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

8.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

8.1.5 Main: Implementing user-defined copy operations

+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

8.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

8.2.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

8.2.4 Foundational: Using UDLs

+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

8.2.4.4 Points to cover

+

This section lists important details for each point.

+

8.2.5 Main: implementing UDLs

+

8.2.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them.

+

8.3.4 Foundational: Using and defining functions with default arguments

+

8.3.4.1 Background/Required Knowledge

+

A student is able to:

+ +

8.3.4.2 Student outcomes

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

8.3.4.3 Caveats

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

8.3.4.4 Points to cover

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

8.3.5 Main: implementing *

+

8.3.5.1 Background/required knowledge

+
    +
  • All of the above.
  • +
+

8.3.5.2 Student outcomes

+

A student should be able to:

+

8.3.5.3 Caveats

+

8.3.5.4 Points to cover

+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.4.1 Overview

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

8.5.1 Foundational: Writing requires-expressions

+

8.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

8.5.1.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

8.5.1.4 Points to cover

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

8.5.2 Main: Advanced requirements

+

8.5.2.1 Background/required knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

8.5.2.2 Student outcomes

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

8.5.2.3 Caveats

+

8.5.2.4 Points to cover

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+ +
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

8.5.3 Advanced

+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

8.6.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

8.6.4 Foundational: Calling static_assert with a constant expression

+

8.6.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

8.6.5 Main: Contracts and static_assert

+

8.6.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.6.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+ +

8.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The following are examples of curricula for course on C++: …

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ +
+ + diff --git a/0.0.9/html_split/Advanced.html b/0.0.9/html_split/Advanced.html new file mode 100644 index 00000000..c4d659ae --- /dev/null +++ b/0.0.9/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+ + + + + diff --git a/0.0.9/html_split/Background_002fRequired-Knowledge.html b/0.0.9/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..d3ee1856 --- /dev/null +++ b/0.0.9/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,65 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] +* explain what an object is? +[C++ object +model: objects], +[C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+ + + + + diff --git a/0.0.9/html_split/Background_002frequired-knowledge.html b/0.0.9/html_split/Background_002frequired-knowledge.html new file mode 100644 index 00000000..79fd94db --- /dev/null +++ b/0.0.9/html_split/Background_002frequired-knowledge.html @@ -0,0 +1,54 @@ + + + + + +Background/required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5.1 Background/required knowledge

+ + + + + + + diff --git a/0.0.9/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/0.0.9/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..3e850b1b --- /dev/null +++ b/0.0.9/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,60 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations and Definitions???
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ + + + + + diff --git a/0.0.9/html_split/Building.html b/0.0.9/html_split/Building.html new file mode 100644 index 00000000..e628fd09 --- /dev/null +++ b/0.0.9/html_split/Building.html @@ -0,0 +1,57 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ + + + + + diff --git a/0.0.9/html_split/C_002b_002b-object-model-copy-semantics.html b/0.0.9/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..6d7350cc --- /dev/null +++ b/0.0.9/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,69 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.9/html_split/Caveats.html b/0.0.9/html_split/Caveats.html new file mode 100644 index 00000000..c5303c9b --- /dev/null +++ b/0.0.9/html_split/Caveats.html @@ -0,0 +1,62 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + + + + + + diff --git a/0.0.9/html_split/Compilation-Model.html b/0.0.9/html_split/Compilation-Model.html new file mode 100644 index 00000000..de11703f --- /dev/null +++ b/0.0.9/html_split/Compilation-Model.html @@ -0,0 +1,62 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ + + + + + diff --git a/0.0.9/html_split/Compile_002dTime-Computation.html b/0.0.9/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..b9aaa0eb --- /dev/null +++ b/0.0.9/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,57 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[‘static-assert’]static_assert‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.9/html_split/Context-and-Aim-of-This-Guide.html b/0.0.9/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..60efa61a --- /dev/null +++ b/0.0.9/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,76 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

3 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+ + +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+ + + + + diff --git a/0.0.9/html_split/Contributing-to-This-Document.html b/0.0.9/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..eac6c286 --- /dev/null +++ b/0.0.9/html_split/Contributing-to-This-Document.html @@ -0,0 +1,55 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

5 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +‘How to Contribute’. +

+ + + + + diff --git a/0.0.9/html_split/Contributors.html b/0.0.9/html_split/Contributors.html new file mode 100644 index 00000000..53ba0efb --- /dev/null +++ b/0.0.9/html_split/Contributors.html @@ -0,0 +1,57 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+ + + + + diff --git a/0.0.9/html_split/Detailed-Information-for-Modules-and-Topics.html b/0.0.9/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..c8c9fcd3 --- /dev/null +++ b/0.0.9/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8 Detailed Information for Modules and Topics

+ + + + + + + + + + + + + + + diff --git a/0.0.9/html_split/Disclaimer.html b/0.0.9/html_split/Disclaimer.html new file mode 100644 index 00000000..a9119836 --- /dev/null +++ b/0.0.9/html_split/Disclaimer.html @@ -0,0 +1,55 @@ + + + + + +Disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

2 Disclaimer

+

This document is intended as a proof of concept to solicit feedback from +others. This document is incomplete. This document likely has at least a +few errors. +

+ + + + + diff --git a/0.0.9/html_split/Error-Handling.html b/0.0.9/html_split/Error-Handling.html new file mode 100644 index 00000000..1f8d3e0e --- /dev/null +++ b/0.0.9/html_split/Error-Handling.html @@ -0,0 +1,59 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Classes of Errors???
[‘?’]errno???
[‘?’]Error Codes???
[‘?’]Exception Handling???
+ + + + + + diff --git a/0.0.9/html_split/Examples-of-Course-Curricula.html b/0.0.9/html_split/Examples-of-Course-Curricula.html new file mode 100644 index 00000000..64eb64b7 --- /dev/null +++ b/0.0.9/html_split/Examples-of-Course-Curricula.html @@ -0,0 +1,53 @@ + + + + + +Examples of Course Curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

9 Examples of Course Curricula

+

[NOTE: Anyone have any suggestions of items to add here?] The +following are examples of curricula for course on C++: … +

+ + + + + diff --git a/0.0.9/html_split/External-ie-Non-Standard-Libraries.html b/0.0.9/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..2bf081e9 --- /dev/null +++ b/0.0.9/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,56 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ + + + + + diff --git a/0.0.9/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/0.0.9/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..ce2c1b01 --- /dev/null +++ b/0.0.9/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,62 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.4 Foundational: Calling static_assert with a constant

+

expression +

+ + + + + + + + + + + + diff --git a/0.0.9/html_split/Foundational-How-and-when-are-copies-made.html b/0.0.9/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..4cec33bd --- /dev/null +++ b/0.0.9/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,63 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4 Foundational: How and when are copies made

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Foundational-Using-UDLs.html b/0.0.9/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..adb461e8 --- /dev/null +++ b/0.0.9/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,61 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.4 Foundational: Using UDLs

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/0.0.9/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..e37a992c --- /dev/null +++ b/0.0.9/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,62 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3.4 Foundational: Using and defining functions with default

+

arguments +

+ + + + + + + + + + + + diff --git a/0.0.9/html_split/Foundational-Writing-requires_002dexpressions.html b/0.0.9/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..6846c6e7 --- /dev/null +++ b/0.0.9/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,60 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.1 Foundational: Writing requires-expressions

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Functions-default-argument.html b/0.0.9/html_split/Functions-default-argument.html new file mode 100644 index 00000000..2571ca9e --- /dev/null +++ b/0.0.9/html_split/Functions-default-argument.html @@ -0,0 +1,67 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.3 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.9/html_split/Functions-user_002ddefined-literals.html b/0.0.9/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..7e41de9c --- /dev/null +++ b/0.0.9/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,66 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.2 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Functions.html b/0.0.9/html_split/Functions.html new file mode 100644 index 00000000..82175a58 --- /dev/null +++ b/0.0.9/html_split/Functions.html @@ -0,0 +1,61 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[‘func-args’]Default Arguments‘✔️’
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[‘udl’]User-Defined Literals‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.9/html_split/Generic-Programming-Templates.html b/0.0.9/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..1a22cd74 --- /dev/null +++ b/0.0.9/html_split/Generic-Programming-Templates.html @@ -0,0 +1,61 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[‘req-expr’]Requires Expressions‘✔️’‘✔️’
+ + + + + + diff --git a/0.0.9/html_split/Glossary.html b/0.0.9/html_split/Glossary.html new file mode 100644 index 00000000..2bf24f26 --- /dev/null +++ b/0.0.9/html_split/Glossary.html @@ -0,0 +1,58 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

13 Glossary

+

Some possible terms to include in the glossary: +

+ + + + + + + diff --git a/0.0.9/html_split/How-To-Contribute.html b/0.0.9/html_split/How-To-Contribute.html new file mode 100644 index 00000000..f1963d55 --- /dev/null +++ b/0.0.9/html_split/How-To-Contribute.html @@ -0,0 +1,89 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+ + +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + + + + + + diff --git a/0.0.9/html_split/Inheritance-and-Class-Hierarchies.html b/0.0.9/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..1a394b07 --- /dev/null +++ b/0.0.9/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,57 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ + + + + + diff --git a/0.0.9/html_split/License.html b/0.0.9/html_split/License.html new file mode 100644 index 00000000..38d2d8d2 --- /dev/null +++ b/0.0.9/html_split/License.html @@ -0,0 +1,100 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+

+Next: , Previous: , Up: Top   [Contents]

+
+ + + + + diff --git a/0.0.9/html_split/Main-Advanced-requirements.html b/0.0.9/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..6c4ac0e4 --- /dev/null +++ b/0.0.9/html_split/Main-Advanced-requirements.html @@ -0,0 +1,60 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +
+

8.5.2 Main: Advanced requirements

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Main-Contracts-and-static_005fassert.html b/0.0.9/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..6c0ba46c --- /dev/null +++ b/0.0.9/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,61 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6.5 Main: Contracts and static_assert

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/0.0.9/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..e38dfd64 --- /dev/null +++ b/0.0.9/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,62 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.1.5 Main: Implementing user-defined copy operations

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Main-implementing-UDLs.html b/0.0.9/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..1f6f3816 --- /dev/null +++ b/0.0.9/html_split/Main-implementing-UDLs.html @@ -0,0 +1,59 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.2.5 Main: implementing UDLs

+ + + + + + + + + + + + diff --git a/0.0.9/html_split/Main-implementing-_002a.html b/0.0.9/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..b661f2d1 --- /dev/null +++ b/0.0.9/html_split/Main-implementing-_002a.html @@ -0,0 +1,62 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

8.3.5 Main: implementing *

+ + + + + + + + + + + + + diff --git a/0.0.9/html_split/Meta_002derror-handling-static_005fassert.html b/0.0.9/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..f81a34e9 --- /dev/null +++ b/0.0.9/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.6 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + + + + + diff --git a/0.0.9/html_split/Module-name-Requires-Expressions.html b/0.0.9/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..8bab76c8 --- /dev/null +++ b/0.0.9/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,59 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + +
+

8.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + + + + + + + + + diff --git a/0.0.9/html_split/Motivation.html b/0.0.9/html_split/Motivation.html new file mode 100644 index 00000000..40b0ec94 --- /dev/null +++ b/0.0.9/html_split/Motivation.html @@ -0,0 +1,57 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+ + + + + diff --git a/0.0.9/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/0.0.9/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..21995615 --- /dev/null +++ b/0.0.9/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,77 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Top   [Contents]

+
+
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/0.0.9/html + +
  2. EPUB format: https:/cplusplus.github.io/SG20/0.0.9/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/0.0.9/html_split/ [Note: +The support for this format needs more work (in order to beautify and +fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+ + + + + diff --git a/0.0.9/html_split/Organization-of-This-Document.html b/0.0.9/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..3e489855 --- /dev/null +++ b/0.0.9/html_split/Organization-of-This-Document.html @@ -0,0 +1,101 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

6 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. [Note: Can I suggest that we use the term +“area” or “unit” instead of “module”? I think that these other +choices are better and also avoid any potential confusion over what is +meant by “module” (i.e., C++ term versus plain English term).] +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+ + +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+ + + + + + diff --git a/0.0.9/html_split/Overview.html b/0.0.9/html_split/Overview.html new file mode 100644 index 00000000..be44bfad --- /dev/null +++ b/0.0.9/html_split/Overview.html @@ -0,0 +1,61 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ + + + + + diff --git a/0.0.9/html_split/Points-to-cover.html b/0.0.9/html_split/Points-to-cover.html new file mode 100644 index 00000000..ba4b5ccf --- /dev/null +++ b/0.0.9/html_split/Points-to-cover.html @@ -0,0 +1,69 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.4 Points to cover

+

This section lists important details for each point. +

+ + + + + + + diff --git a/0.0.9/html_split/Preprocessor.html b/0.0.9/html_split/Preprocessor.html new file mode 100644 index 00000000..345e3963 --- /dev/null +++ b/0.0.9/html_split/Preprocessor.html @@ -0,0 +1,58 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ + + + + + diff --git a/0.0.9/html_split/References-on-Learning-Outcomes.html b/0.0.9/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..7b74cada --- /dev/null +++ b/0.0.9/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,71 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

14.1 References on Learning Outcomes

+ + + + + + + diff --git a/0.0.9/html_split/References.html b/0.0.9/html_split/References.html new file mode 100644 index 00000000..f595be27 --- /dev/null +++ b/0.0.9/html_split/References.html @@ -0,0 +1,59 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Previous: , Up: Top   [Contents]

+
+
+

14 References

+ + + + + + + + + + + diff --git a/0.0.9/html_split/Software-Design.html b/0.0.9/html_split/Software-Design.html new file mode 100644 index 00000000..6b4f6c8b --- /dev/null +++ b/0.0.9/html_split/Software-Design.html @@ -0,0 +1,56 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ + + + + + diff --git a/0.0.9/html_split/Standard-Library.html b/0.0.9/html_split/Standard-Library.html new file mode 100644 index 00000000..c80c7fc3 --- /dev/null +++ b/0.0.9/html_split/Standard-Library.html @@ -0,0 +1,57 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ + + + + + diff --git a/0.0.9/html_split/Student-outcomes.html b/0.0.9/html_split/Student-outcomes.html new file mode 100644 index 00000000..c604549e --- /dev/null +++ b/0.0.9/html_split/Student-outcomes.html @@ -0,0 +1,73 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ + + +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+ + + + + diff --git a/0.0.9/html_split/Summary-of-Modules-and-Topics.html b/0.0.9/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..26b69be7 --- /dev/null +++ b/0.0.9/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,106 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+

[NOTE: These topics are taken mostly from the SG20 GitHub +repository. They are not intended to be complete in any sense. In fact, +by gathering together all topics in one place where they are easily +viewed, it is hoped that missing and unbalanced items will be more +obvious.] +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.9/html_split/Testing-and-Debugging.html b/0.0.9/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..da60211c --- /dev/null +++ b/0.0.9/html_split/Testing-and-Debugging.html @@ -0,0 +1,59 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

7.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ + + + + + diff --git a/0.0.9/html_split/Tooling.html b/0.0.9/html_split/Tooling.html new file mode 100644 index 00000000..43c3b2f4 --- /dev/null +++ b/0.0.9/html_split/Tooling.html @@ -0,0 +1,57 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ + + + + + diff --git a/0.0.9/html_split/Topic-introduction.html b/0.0.9/html_split/Topic-introduction.html new file mode 100644 index 00000000..fff97f27 --- /dev/null +++ b/0.0.9/html_split/Topic-introduction.html @@ -0,0 +1,55 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

8.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+ + + + + diff --git a/0.0.9/html_split/Use-of-This-Document.html b/0.0.9/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..4c820d57 --- /dev/null +++ b/0.0.9/html_split/Use-of-This-Document.html @@ -0,0 +1,58 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

4 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+ + + + + diff --git a/0.0.9/html_split/User_002dDefined-Types-Classes.html b/0.0.9/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..808279ad --- /dev/null +++ b/0.0.9/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,69 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+

7.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[‘copy’]Copy Semantics‘✔️’‘✔️’
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ + + + + + diff --git a/0.0.9/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/0.0.9/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..3f9bf2cd --- /dev/null +++ b/0.0.9/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,69 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+

14.2 Working Group Documents Related to C++ Teaching Guidelines

+ + + + + + + diff --git a/0.0.9/html_split/_0023advanced.html b/0.0.9/html_split/_0023advanced.html new file mode 100644 index 00000000..d503bfc3 --- /dev/null +++ b/0.0.9/html_split/_0023advanced.html @@ -0,0 +1,40 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/0.0.9/html_split/_0023advanced_002d1.html b/0.0.9/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..282a7b88 --- /dev/null +++ b/0.0.9/html_split/_0023advanced_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/0.0.9/html_split/_0023advanced_002d2.html b/0.0.9/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..039b3ffa --- /dev/null +++ b/0.0.9/html_split/_0023advanced_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/0.0.9/html_split/_0023advanced_002d3.html b/0.0.9/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..ebf5529a --- /dev/null +++ b/0.0.9/html_split/_0023advanced_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..99597454 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..f6f6bd07 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..b0b297d4 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..ae34d914 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..7417f625 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..8f0570c9 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..a1cdee14 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..893a0bab --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..60804984 --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..3ea462de --- /dev/null +++ b/0.0.9/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/0.0.9/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html b/0.0.9/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html new file mode 100644 index 00000000..925c568a --- /dev/null +++ b/0.0.9/html_split/_0023basics_002dtypes_002dobjects_002dvalues_002dexpressions_002dstatements_002dand_002dcontrol_002dflow_002dconstructs.html @@ -0,0 +1,40 @@ + + + + + + +#basics-types-objects-values-expressions-statements-and-control-flow-constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #basics-types-objects-values-expressions-statements-and-control-flow-constructs.

+ diff --git a/0.0.9/html_split/_0023building.html b/0.0.9/html_split/_0023building.html new file mode 100644 index 00000000..8ffc9df8 --- /dev/null +++ b/0.0.9/html_split/_0023building.html @@ -0,0 +1,40 @@ + + + + + + +#building (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #building.

+ diff --git a/0.0.9/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html b/0.0.9/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html new file mode 100644 index 00000000..a7e6bad8 --- /dev/null +++ b/0.0.9/html_split/_0023c_002dobject_002dmodel_002dcopy_002dsemantics.html @@ -0,0 +1,40 @@ + + + + + + +#c-object-model-copy-semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-copy-semantics.

+ diff --git a/0.0.9/html_split/_0023caveats.html b/0.0.9/html_split/_0023caveats.html new file mode 100644 index 00000000..d4bac8ba --- /dev/null +++ b/0.0.9/html_split/_0023caveats.html @@ -0,0 +1,40 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/0.0.9/html_split/_0023caveats_002d1.html b/0.0.9/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..64faefd2 --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/0.0.9/html_split/_0023caveats_002d2.html b/0.0.9/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..6c66559f --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/0.0.9/html_split/_0023caveats_002d3.html b/0.0.9/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..479063fa --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/0.0.9/html_split/_0023caveats_002d4.html b/0.0.9/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9588a55f --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/0.0.9/html_split/_0023caveats_002d5.html b/0.0.9/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..11edee5c --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/0.0.9/html_split/_0023caveats_002d6.html b/0.0.9/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..6cea7213 --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/0.0.9/html_split/_0023caveats_002d7.html b/0.0.9/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..2a8f1cd4 --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/0.0.9/html_split/_0023caveats_002d8.html b/0.0.9/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..e3306422 --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/0.0.9/html_split/_0023caveats_002d9.html b/0.0.9/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..004e434f --- /dev/null +++ b/0.0.9/html_split/_0023caveats_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/0.0.9/html_split/_0023compilation_002dmodel.html b/0.0.9/html_split/_0023compilation_002dmodel.html new file mode 100644 index 00000000..10178679 --- /dev/null +++ b/0.0.9/html_split/_0023compilation_002dmodel.html @@ -0,0 +1,40 @@ + + + + + + +#compilation-model (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compilation-model.

+ diff --git a/0.0.9/html_split/_0023compile_002dtime_002dcomputation.html b/0.0.9/html_split/_0023compile_002dtime_002dcomputation.html new file mode 100644 index 00000000..59b0c572 --- /dev/null +++ b/0.0.9/html_split/_0023compile_002dtime_002dcomputation.html @@ -0,0 +1,40 @@ + + + + + + +#compile-time-computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #compile-time-computation.

+ diff --git a/0.0.9/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/0.0.9/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..9294adf7 --- /dev/null +++ b/0.0.9/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,40 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/0.0.9/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/0.0.9/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..272d8482 --- /dev/null +++ b/0.0.9/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/0.0.9/html_split/_0023contributors.html b/0.0.9/html_split/_0023contributors.html new file mode 100644 index 00000000..a391f9de --- /dev/null +++ b/0.0.9/html_split/_0023contributors.html @@ -0,0 +1,40 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/0.0.9/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/0.0.9/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..d32c27e9 --- /dev/null +++ b/0.0.9/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/0.0.9/html_split/_0023disclaimer.html b/0.0.9/html_split/_0023disclaimer.html new file mode 100644 index 00000000..e9658d69 --- /dev/null +++ b/0.0.9/html_split/_0023disclaimer.html @@ -0,0 +1,40 @@ + + + + + + +#disclaimer (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #disclaimer.

+ diff --git a/0.0.9/html_split/_0023error_002dhandling.html b/0.0.9/html_split/_0023error_002dhandling.html new file mode 100644 index 00000000..80cfb94b --- /dev/null +++ b/0.0.9/html_split/_0023error_002dhandling.html @@ -0,0 +1,40 @@ + + + + + + +#error-handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling.

+ diff --git a/0.0.9/html_split/_0023examples_002dof_002dcourse_002dcurricula.html b/0.0.9/html_split/_0023examples_002dof_002dcourse_002dcurricula.html new file mode 100644 index 00000000..99af091c --- /dev/null +++ b/0.0.9/html_split/_0023examples_002dof_002dcourse_002dcurricula.html @@ -0,0 +1,40 @@ + + + + + + +#examples-of-course-curricula (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #examples-of-course-curricula.

+ diff --git a/0.0.9/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html b/0.0.9/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html new file mode 100644 index 00000000..fc9b3eba --- /dev/null +++ b/0.0.9/html_split/_0023external_002di_002ee_002e_002dnon_002dstandard_002dlibraries.html @@ -0,0 +1,40 @@ + + + + + + +#external-i.e.-non-standard-libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #external-i.e.-non-standard-libraries.

+ diff --git a/0.0.9/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html b/0.0.9/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html new file mode 100644 index 00000000..f9156801 --- /dev/null +++ b/0.0.9/html_split/_0023foundational_002dcalling_002dstatic_005fassert_002dwith_002da_002dconstant_002dexpression.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-calling-static_assert-with-a-constant-expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-calling-static_assert-with-a-constant-expression.

+ diff --git a/0.0.9/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html b/0.0.9/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html new file mode 100644 index 00000000..88f62bcb --- /dev/null +++ b/0.0.9/html_split/_0023foundational_002dhow_002dand_002dwhen_002dare_002dcopies_002dmade.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-how-and-when-are-copies-made (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-how-and-when-are-copies-made.

+ diff --git a/0.0.9/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html b/0.0.9/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html new file mode 100644 index 00000000..95ab098b --- /dev/null +++ b/0.0.9/html_split/_0023foundational_002dusing_002dand_002ddefining_002dfunctions_002dwith_002ddefault_002darguments.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-and-defining-functions-with-default-arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-and-defining-functions-with-default-arguments.

+ diff --git a/0.0.9/html_split/_0023foundational_002dusing_002dudls.html b/0.0.9/html_split/_0023foundational_002dusing_002dudls.html new file mode 100644 index 00000000..2f7afdd2 --- /dev/null +++ b/0.0.9/html_split/_0023foundational_002dusing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-using-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-udls.

+ diff --git a/0.0.9/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html b/0.0.9/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html new file mode 100644 index 00000000..708f2d34 --- /dev/null +++ b/0.0.9/html_split/_0023foundational_002dwriting_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#foundational-writing-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-writing-requires-expressions.

+ diff --git a/0.0.9/html_split/_0023functions.html b/0.0.9/html_split/_0023functions.html new file mode 100644 index 00000000..e304abe9 --- /dev/null +++ b/0.0.9/html_split/_0023functions.html @@ -0,0 +1,40 @@ + + + + + + +#functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions.

+ diff --git a/0.0.9/html_split/_0023functions_002ddefault_002dargument.html b/0.0.9/html_split/_0023functions_002ddefault_002dargument.html new file mode 100644 index 00000000..ccfbcbbe --- /dev/null +++ b/0.0.9/html_split/_0023functions_002ddefault_002dargument.html @@ -0,0 +1,40 @@ + + + + + + +#functions-default-argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-default-argument.

+ diff --git a/0.0.9/html_split/_0023functions_002duser_002ddefined_002dliterals.html b/0.0.9/html_split/_0023functions_002duser_002ddefined_002dliterals.html new file mode 100644 index 00000000..b4f78b5b --- /dev/null +++ b/0.0.9/html_split/_0023functions_002duser_002ddefined_002dliterals.html @@ -0,0 +1,40 @@ + + + + + + +#functions-user-defined-literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #functions-user-defined-literals.

+ diff --git a/0.0.9/html_split/_0023generic_002dprogramming_002dtemplates.html b/0.0.9/html_split/_0023generic_002dprogramming_002dtemplates.html new file mode 100644 index 00000000..3b910807 --- /dev/null +++ b/0.0.9/html_split/_0023generic_002dprogramming_002dtemplates.html @@ -0,0 +1,40 @@ + + + + + + +#generic-programming-templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #generic-programming-templates.

+ diff --git a/0.0.9/html_split/_0023glossary.html b/0.0.9/html_split/_0023glossary.html new file mode 100644 index 00000000..9b46bf6d --- /dev/null +++ b/0.0.9/html_split/_0023glossary.html @@ -0,0 +1,40 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/0.0.9/html_split/_0023how_002dto_002dcontribute.html b/0.0.9/html_split/_0023how_002dto_002dcontribute.html new file mode 100644 index 00000000..d9cff4a6 --- /dev/null +++ b/0.0.9/html_split/_0023how_002dto_002dcontribute.html @@ -0,0 +1,40 @@ + + + + + + +#how-to-contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #how-to-contribute.

+ diff --git a/0.0.9/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html b/0.0.9/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html new file mode 100644 index 00000000..def51408 --- /dev/null +++ b/0.0.9/html_split/_0023inheritance_002dand_002dclass_002dhierarchies.html @@ -0,0 +1,40 @@ + + + + + + +#inheritance-and-class-hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #inheritance-and-class-hierarchies.

+ diff --git a/0.0.9/html_split/_0023license.html b/0.0.9/html_split/_0023license.html new file mode 100644 index 00000000..6b44dd16 --- /dev/null +++ b/0.0.9/html_split/_0023license.html @@ -0,0 +1,40 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/0.0.9/html_split/_0023main_002dadvanced_002drequirements.html b/0.0.9/html_split/_0023main_002dadvanced_002drequirements.html new file mode 100644 index 00000000..82145335 --- /dev/null +++ b/0.0.9/html_split/_0023main_002dadvanced_002drequirements.html @@ -0,0 +1,40 @@ + + + + + + +#main-advanced-requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-advanced-requirements.

+ diff --git a/0.0.9/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html b/0.0.9/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html new file mode 100644 index 00000000..22b0484b --- /dev/null +++ b/0.0.9/html_split/_0023main_002dcontracts_002dand_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#main-contracts-and-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-contracts-and-static_assert.

+ diff --git a/0.0.9/html_split/_0023main_002dimplementing.html b/0.0.9/html_split/_0023main_002dimplementing.html new file mode 100644 index 00000000..260008c4 --- /dev/null +++ b/0.0.9/html_split/_0023main_002dimplementing.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing.

+ diff --git a/0.0.9/html_split/_0023main_002dimplementing_002dudls.html b/0.0.9/html_split/_0023main_002dimplementing_002dudls.html new file mode 100644 index 00000000..a41d194b --- /dev/null +++ b/0.0.9/html_split/_0023main_002dimplementing_002dudls.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-udls (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-udls.

+ diff --git a/0.0.9/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html b/0.0.9/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html new file mode 100644 index 00000000..1e5a4d86 --- /dev/null +++ b/0.0.9/html_split/_0023main_002dimplementing_002duser_002ddefined_002dcopy_002doperations.html @@ -0,0 +1,40 @@ + + + + + + +#main-implementing-user-defined-copy-operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #main-implementing-user-defined-copy-operations.

+ diff --git a/0.0.9/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html b/0.0.9/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html new file mode 100644 index 00000000..4502ed85 --- /dev/null +++ b/0.0.9/html_split/_0023meta_002derror_002dhandling_002dstatic_005fassert.html @@ -0,0 +1,40 @@ + + + + + + +#meta-error-handling-static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #meta-error-handling-static_assert.

+ diff --git a/0.0.9/html_split/_0023module_002dname_002drequires_002dexpressions.html b/0.0.9/html_split/_0023module_002dname_002drequires_002dexpressions.html new file mode 100644 index 00000000..56a9ebf0 --- /dev/null +++ b/0.0.9/html_split/_0023module_002dname_002drequires_002dexpressions.html @@ -0,0 +1,40 @@ + + + + + + +#module-name-requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-requires-expressions.

+ diff --git a/0.0.9/html_split/_0023motivation.html b/0.0.9/html_split/_0023motivation.html new file mode 100644 index 00000000..0141374c --- /dev/null +++ b/0.0.9/html_split/_0023motivation.html @@ -0,0 +1,40 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/0.0.9/html_split/_0023motivation_002d1.html b/0.0.9/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..7e4a69e3 --- /dev/null +++ b/0.0.9/html_split/_0023motivation_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/0.0.9/html_split/_0023motivation_002d2.html b/0.0.9/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..7901fd3d --- /dev/null +++ b/0.0.9/html_split/_0023motivation_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/0.0.9/html_split/_0023motivation_002d3.html b/0.0.9/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..ec720ad8 --- /dev/null +++ b/0.0.9/html_split/_0023motivation_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/0.0.9/html_split/_0023motivation_002d4.html b/0.0.9/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..f53583aa --- /dev/null +++ b/0.0.9/html_split/_0023motivation_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/0.0.9/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/0.0.9/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..57e8b6e4 --- /dev/null +++ b/0.0.9/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,40 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/0.0.9/html_split/_0023organization_002dof_002dthis_002ddocument.html b/0.0.9/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..e312b8e4 --- /dev/null +++ b/0.0.9/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/0.0.9/html_split/_0023overview.html b/0.0.9/html_split/_0023overview.html new file mode 100644 index 00000000..b2d4bdc1 --- /dev/null +++ b/0.0.9/html_split/_0023overview.html @@ -0,0 +1,40 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/0.0.9/html_split/_0023overview_002d1.html b/0.0.9/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..d551764d --- /dev/null +++ b/0.0.9/html_split/_0023overview_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/0.0.9/html_split/_0023overview_002d2.html b/0.0.9/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..5a34b055 --- /dev/null +++ b/0.0.9/html_split/_0023overview_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/0.0.9/html_split/_0023overview_002d3.html b/0.0.9/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..f2301452 --- /dev/null +++ b/0.0.9/html_split/_0023overview_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/0.0.9/html_split/_0023overview_002d4.html b/0.0.9/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..2436b9a1 --- /dev/null +++ b/0.0.9/html_split/_0023overview_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover.html b/0.0.9/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..424b02b4 --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d1.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..2a554bb4 --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d2.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..053a51ac --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d3.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..b0dad487 --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d4.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..94de8fad --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d5.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..39d1eafb --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d6.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..92df88fe --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d7.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..6e6c8958 --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/0.0.9/html_split/_0023points_002dto_002dcover_002d8.html b/0.0.9/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..b5574e1c --- /dev/null +++ b/0.0.9/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/0.0.9/html_split/_0023preprocessor.html b/0.0.9/html_split/_0023preprocessor.html new file mode 100644 index 00000000..a3bb5f6e --- /dev/null +++ b/0.0.9/html_split/_0023preprocessor.html @@ -0,0 +1,40 @@ + + + + + + +#preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #preprocessor.

+ diff --git a/0.0.9/html_split/_0023references.html b/0.0.9/html_split/_0023references.html new file mode 100644 index 00000000..69fbd6b1 --- /dev/null +++ b/0.0.9/html_split/_0023references.html @@ -0,0 +1,40 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/0.0.9/html_split/_0023references_002don_002dlearning_002doutcomes.html b/0.0.9/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..d28fbbf9 --- /dev/null +++ b/0.0.9/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/0.0.9/html_split/_0023software_002ddesign.html b/0.0.9/html_split/_0023software_002ddesign.html new file mode 100644 index 00000000..16f5f543 --- /dev/null +++ b/0.0.9/html_split/_0023software_002ddesign.html @@ -0,0 +1,40 @@ + + + + + + +#software-design (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #software-design.

+ diff --git a/0.0.9/html_split/_0023standard_002dlibrary.html b/0.0.9/html_split/_0023standard_002dlibrary.html new file mode 100644 index 00000000..71956d33 --- /dev/null +++ b/0.0.9/html_split/_0023standard_002dlibrary.html @@ -0,0 +1,40 @@ + + + + + + +#standard-library (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #standard-library.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes.html b/0.0.9/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..df0035d1 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d1.html b/0.0.9/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..e9344b72 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d2.html b/0.0.9/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..6fa7724f --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d3.html b/0.0.9/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..195d9d29 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d4.html b/0.0.9/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..3e304303 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d5.html b/0.0.9/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..0a4a7da2 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d6.html b/0.0.9/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..c5c4ac00 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d7.html b/0.0.9/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..5233f944 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d8.html b/0.0.9/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..f19fd7f2 --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/0.0.9/html_split/_0023student_002doutcomes_002d9.html b/0.0.9/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..735a21ff --- /dev/null +++ b/0.0.9/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,40 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/0.0.9/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/0.0.9/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..48011781 --- /dev/null +++ b/0.0.9/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,40 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/0.0.9/html_split/_0023testing_002dand_002ddebugging.html b/0.0.9/html_split/_0023testing_002dand_002ddebugging.html new file mode 100644 index 00000000..1ae096da --- /dev/null +++ b/0.0.9/html_split/_0023testing_002dand_002ddebugging.html @@ -0,0 +1,40 @@ + + + + + + +#testing-and-debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #testing-and-debugging.

+ diff --git a/0.0.9/html_split/_0023tooling.html b/0.0.9/html_split/_0023tooling.html new file mode 100644 index 00000000..634a8dc0 --- /dev/null +++ b/0.0.9/html_split/_0023tooling.html @@ -0,0 +1,40 @@ + + + + + + +#tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #tooling.

+ diff --git a/0.0.9/html_split/_0023topic_002dintroduction.html b/0.0.9/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..742d5d90 --- /dev/null +++ b/0.0.9/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/0.0.9/html_split/_0023topic_002dintroduction_002d1.html b/0.0.9/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..a110644e --- /dev/null +++ b/0.0.9/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/0.0.9/html_split/_0023topic_002dintroduction_002d2.html b/0.0.9/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..986bf37f --- /dev/null +++ b/0.0.9/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/0.0.9/html_split/_0023topic_002dintroduction_002d3.html b/0.0.9/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..3d14fd9f --- /dev/null +++ b/0.0.9/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/0.0.9/html_split/_0023topic_002dintroduction_002d4.html b/0.0.9/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..c73a2361 --- /dev/null +++ b/0.0.9/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,40 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/0.0.9/html_split/_0023use_002dof_002dthis_002ddocument.html b/0.0.9/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..68d835dd --- /dev/null +++ b/0.0.9/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,40 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/0.0.9/html_split/_0023user_002ddefined_002dtypes_002dclasses.html b/0.0.9/html_split/_0023user_002ddefined_002dtypes_002dclasses.html new file mode 100644 index 00000000..04771a92 --- /dev/null +++ b/0.0.9/html_split/_0023user_002ddefined_002dtypes_002dclasses.html @@ -0,0 +1,40 @@ + + + + + + +#user-defined-types-classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #user-defined-types-classes.

+ diff --git a/0.0.9/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/0.0.9/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..f4b94350 --- /dev/null +++ b/0.0.9/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,40 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/0.0.9/html_split/index.html b/0.0.9/html_split/index.html new file mode 100644 index 00000000..c4e5ff06 --- /dev/null +++ b/0.0.9/html_split/index.html @@ -0,0 +1,240 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +

Table of Contents

+ +
+ + +
+ + + +
+

Guidelines for Teaching C++

+ + + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/0.0.9/html_split/unknown_node.html b/0.0.9/html_split/unknown_node.html new file mode 100644 index 00000000..5a652e58 --- /dev/null +++ b/0.0.9/html_split/unknown_node.html @@ -0,0 +1,763 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+

+   [Contents]

+
+
+

8.1.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+

+   [Contents]

+
+

8.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+

+   [Contents]

+
+

8.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.1.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+

+   [Contents]

+
+

8.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+ + +
+

+   [Contents]

+
+

8.2.3 Topic introduction

+

Very brief introduction to the topic. +

+ + +
+

+   [Contents]

+
+

8.2.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. +[C++ object +model: declarations] +

+
+

+   [Contents]

+
+

8.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+

+   [Contents]

+
+

8.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+ + +
+

+   [Contents]

+
+

8.2.4.4 Points to cover

+

This section lists important details for each point. +

+
+

+   [Contents]

+
+

8.2.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.2.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+

+   [Contents]

+
+

8.2.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+

+   [Contents]

+
+

8.3.1 Overview

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+

+   [Contents]

+
+

8.3.2 Motivation

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+

+   [Contents]

+
+

8.3.3 Topic introduction

+

Explain how default arguments work and how to define them. +

+
+

+   [Contents]

+
+

8.3.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.3.4.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+

+   [Contents]

+
+

8.3.4.3 Caveats

+ + +
+

+   [Contents]

+
+

8.3.4.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.3.5.2 Student outcomes

+

A student should be able to: +

+
+

+   [Contents]

+
+

8.3.5.3 Caveats

+ +
+

+   [Contents]

+
+

8.3.5.4 Points to cover

+ +
+

+   [Contents]

+
+

8.3.6 Advanced

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+

+   [Contents]

+
+

8.4.1 Overview

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+

+   [Contents]

+
+

8.4.2 Motivation

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: +concepts] +

+
+

+   [Contents]

+
+

8.5 Topic introduction

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + + + + + +
+

+   [Contents]

+
+

8.5.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+ + +
+

+   [Contents]

+
+

8.5.1.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+

+   [Contents]

+
+

8.5.1.3 Caveats

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+

+   [Contents]

+
+

8.5.1.4 Points to cover

+ + +
+

+   [Contents]

+
+

8.5.2.1 Background/required knowledge

+ + +

A student is able to: +

+ + +
+

+   [Contents]

+
+

8.5.2.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+

+   [Contents]

+
+

8.5.2.3 Caveats

+ +
+

+   [Contents]

+
+

8.5.2.4 Points to cover

+ + +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+ + +
+

+   [Contents]

+
+

8.5.3 Advanced

+ +
+

+   [Contents]

+
+

8.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+

+   [Contents]

+
+

8.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+

+   [Contents]

+
+

8.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+

+   [Contents]

+
+

8.6.4.1 Background/Required Knowledge

+

A student: +

+ + +
+

+   [Contents]

+
+

8.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+

+   [Contents]

+
+

8.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.4.4 Points to cover

+

This section lists important details for each point. +

+ + +
+

+   [Contents]

+
+

8.6.5.1 Background/Required Knowledge

+ + +
+

+   [Contents]

+
+

8.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+

+   [Contents]

+
+

8.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+

+   [Contents]

+
+

8.6.5.4 Points to cover

+

This section lists important details for each point. +

+ + +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+

+   [Contents]

+
+

8.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+ + + + + diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 2427faf7..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,41 +0,0 @@ -Copyright (c) Standard C++ Foundation and its contributors - -Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free, -perpetual license to copy, use, modify, and create derivative works from this -project for your personal or internal business use only. The above copyright -notice and this permission notice shall be included in all copies or -substantial portions of the project. This license does not grant permission -to use the trade names, trademarks, service marks, or product names of the -licensor, except as required for reasonable and customary use in describing -the origin of the project. - -Standard C++ Foundation reserves the right to accept contributions to the -project at its discretion. - -By contributing material to this project, you grant Standard C++ Foundation, -and those who receive the material directly or indirectly from Standard C++ -Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable, -transferrable license to reproduce, prepare derivative works of, publicly -display, publicly perform, and distribute your contributed material and such -derivative works, and to sublicense any or all of the foregoing rights to third -parties for commercial or non-commercial use. You also grant Standard C++ -Foundation, and those who receive the material directly or indirectly from -Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free, -irrevocable license under your patent claims that directly read on your -contributed material to make, have made, use, offer to sell, sell and import -or otherwise dispose of the material. You warrant that your material is your -original work, or that you have the right to grant the above licenses. - -THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE -PROJECT. - -If you believe that anything in the project infringes your copyright, please -contact us at admin@isocpp.org with your contact information and a detailed -description of your intellectual property, including a specific URL where you -believe your intellectual property is being infringed. - diff --git a/Makefile b/Makefile deleted file mode 100644 index 1ee61160..00000000 --- a/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -SUBDIRS = \ - sources \ - -.PHONY: all world clean install -all world clean install: - for subdir in $(SUBDIRS); do \ - ( cd $$subdir && make -$(MAKEFLAGS) $@ ) || exit 1; \ - done diff --git a/PR_0.0.20/guidelines.epub b/PR_0.0.20/guidelines.epub new file mode 100644 index 00000000..a40fa767 Binary files /dev/null and b/PR_0.0.20/guidelines.epub differ diff --git a/PR_0.0.20/html/images/cpp_logo.png b/PR_0.0.20/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/PR_0.0.20/html/images/cpp_logo.png differ diff --git a/PR_0.0.20/html/index.html b/PR_0.0.20/html/index.html new file mode 100644 index 00000000..743eaba5 --- /dev/null +++ b/PR_0.0.20/html/index.html @@ -0,0 +1,2156 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version PR_0.0.20

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/PR_0.0.20/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/PR_0.0.20/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/PR_0.0.20/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations???
[def]Definitions✔️✔️✔️
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[coe]Categories of Errors✔️✔️
[?]errno???
[?]Error Codes???
[eh]Exception Handling✔️✔️✔️
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

C++ offers a type safe way of passing around errors, contrary to the C-style of error handling, by this, we prevent bugs when passing error codes. Furthermore, error handling with error codes is more commonly used than exception handling, which only should be used in exceptional situations and in some environments is not feasible at all, e.g., in embedded or performance critical software.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

C++ offers std::error_code, which encapsulates error codes in a type safe way. This topic describes how to use these error codes.

+

7.1.4 Foundational: Handling error codes with std::error_code

+

7.1.4.1 Background/Required Knowledge

+

A student:

+ +

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain the message of the error code or check if an error occurred.
  2. +
  3. distinguish between the different categories and make justified decisions when to use which
  4. +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • a brief overview of std::error_code and how to use it
  • +
+

7.1.5 Main: Designing APIs around std::error_code

+

7.1.5.1 Background/Required Knowledge

+
    +
  • should know how to use reference parameters as an output parameter
  • +
+

7.1.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. create an error_code and design API that work with std:error_code
  2. +
  3. write code that utilizes std::error_category
  4. +
  5. explain the difference between C-style error handling with errno and std::error_code
  6. +
  7. make effective use of the interface of std::error_code
  8. +
+

7.1.5.3 Caveats

+
    +
  • reset errno before calling a function that might set errno (better pass an input parameter std::error_code)
  • +
+

7.1.5.4 Points to cover

+
    +
  • provide a full picture of std::error_code and it’s APIs
  • +
  • std::error_category (explorative)
  • +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • implementing your own error_category
  • +
+

7.1.7 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+

7.1.8 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Exception handling is used to be able to continue the program in case of exceptional situations (like requesting a ridiculous amount of memory: bad_alloc).

+

7.1.9 Topic introduction

+

Very brief introduction to the topic.

+

There are other forms of handling difficult situations, but here we concentrate on exception handling and the peculiarities/characteristics of it. Because there are different forms, we should know when to use which type of handling special situations.

+

7.1.10 Foundational: Standards exception hierarchy

+

7.1.10.1 Background/Required Knowledge

+

A student:

+ +

7.1.10.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Explain how some std:: calls may cause an exception
  2. +
  3. Discern the different standard exception types
  4. +
  5. Write simple try … except code (e.g., out of memory, vector at indexing)
  6. +
  7. Explain on a “simplified” conceptual level what happens when an exception is thrown and is bubbled up through the callers until it is caught
  8. +
+

7.1.10.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Exceptions should be used for exceptional situations and should not be used to manage normal control flow.
  • +
+

7.1.10.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Exception hierarchy from the standard library
  • +
  • Common library functions that may throw exceptions
  • +
  • Basic handling exceptions: try/catch/throw
  • +
  • How exceptions bubble up until caught
  • +
+

7.1.11 Main: Exception guarantees

+

7.1.11.1 Background/Required Knowledge

+
    +
  • RAII
  • +
  • Order of construction/destruction of class members
  • +
+

7.1.11.2 Student outcomes

+

A student should be able to:

+
    +
  1. Explain the four different exception guarantees
  2. +
  3. Explain the exception guarantees that the standard library containers offer.
  4. +
  5. Explain what happens when a exception is thrown in constructor
  6. +
+

7.1.11.3 Caveats

+
    +
  • Make sure code is designed with RAII in mind to prevent resources leaking during exception handling, when the stack is unwound.
  • +
  • Care should be taken in constructor design to make all fully constructed members deleted when the stack unwinding mechanism is activated.
  • +
+

7.1.11.4 Points to cover

+
    +
  • Exception guarantees: Nothrow/Strong/Basic/No
  • +
  • Rethrowing an exception
  • +
+

7.1.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • Rethrowing a modified exception
  • +
  • Writing exception safe containers
  • +
+

7.2 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Programs can run in a normal state or erroneous state. Students should be able to identify different types of erroneous state and how to best handle them.

+

7.2.3 Topic introduction

+

Very brief introduction to the topic.

+

This topic is an umbrella topic that refers to the different topics for types of errors and error handling.

+

7.2.4 Foundational: Categories of errors

+

7.2.4.1 Background/Required Knowledge

+

A student:

+ +

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Describe different kinds of errors and exceptional situations that require different approaches of error handling.
  2. +
  3. Provide some examples of the different error categories.
  4. +
  5. Identify potential erroneous code sections and attribute them to different error categories.
  6. +
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.2.4.4 Points to cover

+

This section lists important details for each point.

+

Errors can happen at different times during software lifetime.

+
    +
  • Compile-time errors
  • +
  • Link-time errors
  • +
  • Execution-time errors
  • +
+

There are different types of errors

+
    +
  • Logic errors (violations of logical preconditions)
  • +
  • Run-time errors (errors during code execution due to causes that are external to the program)
  • +
+

7.2.5 Main: Handling different categories of errors

+

7.2.5.1 Background/Required Knowledge

+

7.2.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. pick the right error handling approach for a given problem.
  2. +
  3. enumerate different error handling strategies.
  4. +
  5. make a clear distinction between error-handling code and normal-case handling code
  6. +
+

7.2.5.3 Caveats

+
    +
  • The different error handling strategies have different trade-offs (runtime performance, readability, …)
  • +
  • The trade-off space depends on the run-time context (embedded, …)
  • +
  • There also exist unhandleable errors (e.g., ODR violations, undefined behavior)
  • +
+

7.2.5.4 Points to cover

+ +

7.2.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.3 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.3.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.3.4 Foundational: Using UDLs

+

7.3.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.3.4.4 Points to cover

+

This section lists important details for each point.

+

7.3.5 Main: implementing UDLs

+

7.3.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.4 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.4.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.4.4 Foundational: Using and defining functions with default arguments

+

7.4.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.4.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.4.5 Main: implementing *

+

7.4.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.4.5.4 Points to cover

+

This section lists important details for each point.

+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

8 Module name: Passing Parameters by Value

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ + + + + + + + + + + + + + + + + +
+Level + +Objectives +
+Foundational + +Defining and calling functions with values +
+Main + +
+Advanced + +
+

8.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

The fundamental element for code-reuse is a function. For functions to be useful, we need to parameterize them. Understanding how to do such is thus fundamental to programming in any language.

+

8.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how to define functions with parameters and call them with values.

+

8.4 Foundational: Using reference types to avoid copies

+

8.4.1 Background/Required Knowledge

+

A student is able to:

+
    +
  • Explain what a function is
  • +
+

8.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call a function with any number of parameters using the same number of arguments
  2. +
  3. Define a function with any number of parameters
  4. +
+

8.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • A function is called by invoking the name of the function, followed by parentheses
  • +
  • For each parameter in the function signature, a value must be provided, and in the same order
  • +
  • Multiple values passed to a function are comma-separated
  • +
  • When defining a function, you must list the parameters with the type first, and parameter name second
  • +
+

8.5 Main: Using references to modify external data

+

8.5.1 Background/Required Knowledge

+

8.5.2 Student outcomes

+

8.5.3 Caveats

+

8.5.4 Points to cover

+

8.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Module name: Passing Parameters by Reference

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ + + + + + + + + + + + + + + + + +
+Level + +Objectives +
+Foundational + +Avoiding copies using const-reference modifiers +
+Main + +Using references to modify external data +
+Advanced + +
+

9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

9.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain what a reference type is and how it constrasts with a value type.

+

9.4 Foundational: Using reference types to avoid copies

+

9.4.1 Background/Required Knowledge

+

A student is able to:

+
    +
  • Define and call a function with parameters
  • +
+

9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Use const-refernce types for function arguments
  2. +
  3. Explain what considerations to take when deciding whether or not to use a const-reference type
  4. +
+

9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • No copy of the data is made when taken by constant reference
  • +
  • A constant reference value cannot be modified
  • +
  • The lifetime of a constant reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use.
  • +
  • Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance.
  • +
+

9.5 Main: Using references to modify external data

+

9.5.1 Background/Required Knowledge

+
    +
  • All of the above
  • +
+

9.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. Define and utilize a non-const reference for passing values out of a function
  2. +
+

9.5.3 Caveats

+

9.5.4 Points to cover

+
    +
  • If the function does not intend to modify the value, const-references should be preferred
  • +
  • A reference value may be modified
  • +
  • The lifetime of a reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use.
  • +
  • Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance.
  • +
+

9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9.7 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

9.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

9.8 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

9.8.1 Foundational: Writing requires-expressions

+

9.8.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

9.8.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

9.8.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

9.8.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

9.8.2 Main: Advanced requirements

+

9.8.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

9.8.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

9.8.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

9.8.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

9.8.3 Advanced

+

See user-defined-literals.

+

9.9 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

9.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

9.9.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

9.9.4 Foundational: Calling static_assert with a constant expression

+

9.9.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

9.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

9.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

9.9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

9.9.5 Main: Contracts and static_assert

+

9.9.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

9.9.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

9.9.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

9.9.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+

9.9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9.10 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.10.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+

9.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Introduces a name and it’s type
  • +
  • int baz;
  • +
  • void bar();
  • +
  • class Foo;
  • +
+

9.10.3 Topic introduction

+

Very brief introduction to the topic.

+

Introduce names and their associated type in a scope.

+

9.10.4 Foundational: Declaring variables

+

9.10.4.1 Background/Required Knowledge

+

A student:

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type)
    • +
    • int (Integer type)
    • +
    • double (Floating-point type)
    • +
  • +
+

9.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. declare a variable with a specific type ‘int baz;’
  2. +
  3. declare a function ‘void bar();’
  4. +
  5. declare a class ‘class Foo;’
  6. +
  7. forward declare a user-defined type or a function
  8. +
  9. explain the difference between a definition and a declaration
  10. +
+

9.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

9.10.4.4 Points to cover

+

This section lists important details for each point.

+

9.10.5 Main: Declarations for programs

+

9.10.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Basic template syntax
  • +
+

9.10.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. create header and source files with a declaration in the former and definition of a variable/function in the latter
  2. +
  3. declare type aliases to introduce a type with an alternative name ‘using std::string;’
  4. +
  5. write a forward template declaration
  6. +
+

9.10.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Declaring aliases can introduce name clashes
  • +
  • Prefer using declaration’s over using directives in header files [link]
  • +
  • The order of declarations dictates the order of initialization
  • +
+

9.10.5.4 Points to cover

+

This section lists important details for each point.

+

9.10.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • asm declaration
  • +
  • using-enum-declaration
  • +
  • extern “C” declarations
  • +
+

9.11 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.11.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+

9.11.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • A definition is a declaration that supplies all that is needed for a complete entity
  • +
  • int baz = 42;
  • +
  • void bar() { /* implementation */ }
  • +
  • class Foo { /* class body */ };
  • +
+

9.11.3 Topic introduction

+

Very brief introduction to the topic.

+

A definition extends a declaration, providing all that is needed for a complete entity, e.g., allocate memory for variables, provide the implementation for functions, complete definitions of data and function members of a class.

+

9.11.4 Foundational: Defining variables and ODR

+

9.11.4.1 Background/Required Knowledge

+

A student:

+ +

9.11.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. define a variable with a specific type int baz = 42;
  2. +
  3. define a function void bar() {}
  4. +
  5. define a class class Foo {};
  6. +
  7. explain the one definition rule
  8. +
+

9.11.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

9.11.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • One definition rule (ODR)
  • +
+

9.11.5 Main: Defining for programs

+

9.11.5.1 Background/Required Knowledge

+ +

9.11.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. organize variables, functions, classes into multiple translation units, describing interface with declarations and providing the implementations with definitions without violating ODR.
  2. +
  3. distinguish between template declaration and definition
  4. +
+

9.11.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Putting a definition into a header file that is included more than once leads to ODR violations, possibly resulting in linker errors.
  • +
+

9.11.5.4 Points to cover

+

This section lists important details for each point.

+

9.11.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • ABI Incompatibilities: Different definitions of the same type in multiple object files can lead to subtle program errors.
  • +
+

9.12 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.12.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

9.12.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

9.12.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

9.12.4 Foundational: How and when are copies made

+

9.12.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

9.12.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

9.12.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

9.12.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

9.12.5 Main: Implementing user-defined copy operations

+

9.12.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

9.12.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

9.12.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

9.12.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

9.12.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

See concepts.

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ + +
+ + diff --git a/PR_0.0.20/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html b/PR_0.0.20/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html new file mode 100644 index 00000000..d0c6d6c1 --- /dev/null +++ b/PR_0.0.20/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html @@ -0,0 +1,65 @@ + + + + + +Advanced Exception-safe containers and edge cases (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • Rethrowing a modified exception +
  • Writing exception safe containers +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Advanced-Special-cases-and-peculiarities.html b/PR_0.0.20/html_split/Advanced-Special-cases-and-peculiarities.html new file mode 100644 index 00000000..ff2f69cb --- /dev/null +++ b/PR_0.0.20/html_split/Advanced-Special-cases-and-peculiarities.html @@ -0,0 +1,65 @@ + + + + + +Advanced Special cases and peculiarities (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.11.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • ABI Incompatibilities: Different definitions of the same type in +multiple object files can lead to subtle program errors. +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Advanced.html b/PR_0.0.20/html_split/Advanced.html new file mode 100644 index 00000000..b8211bc8 --- /dev/null +++ b/PR_0.0.20/html_split/Advanced.html @@ -0,0 +1,64 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • implementing your own error_category +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Background_002fRequired-Knowledge.html b/PR_0.0.20/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..82c12dc6 --- /dev/null +++ b/PR_0.0.20/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,63 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.1 Background/Required Knowledge

+

A student: +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Background_002fRequired-knowledge.html b/PR_0.0.20/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..3a48e1ec --- /dev/null +++ b/PR_0.0.20/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,58 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+ +
+

7.4.5.1 Background/Required knowledge

+
    +
  • All of the above. +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/PR_0.0.20/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..fbe3431a --- /dev/null +++ b/PR_0.0.20/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,66 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations???
[def]Definitions‘✔️’✔️✔️
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Building.html b/PR_0.0.20/html_split/Building.html new file mode 100644 index 00000000..2429fdf0 --- /dev/null +++ b/PR_0.0.20/html_split/Building.html @@ -0,0 +1,62 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/C_002b_002b-object-model-Declarations.html b/PR_0.0.20/html_split/C_002b_002b-object-model-Declarations.html new file mode 100644 index 00000000..0bf03467 --- /dev/null +++ b/PR_0.0.20/html_split/C_002b_002b-object-model-Declarations.html @@ -0,0 +1,69 @@ + + + + + +C++ object model Declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

9.10 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/C_002b_002b-object-model-Definitions.html b/PR_0.0.20/html_split/C_002b_002b-object-model-Definitions.html new file mode 100644 index 00000000..77b1abc6 --- /dev/null +++ b/PR_0.0.20/html_split/C_002b_002b-object-model-Definitions.html @@ -0,0 +1,69 @@ + + + + + +C++ object model Definitions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

9.11 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/C_002b_002b-object-model-copy-semantics.html b/PR_0.0.20/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..ba950b5f --- /dev/null +++ b/PR_0.0.20/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,67 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

9.12 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Caveats.html b/PR_0.0.20/html_split/Caveats.html new file mode 100644 index 00000000..8e93604b --- /dev/null +++ b/PR_0.0.20/html_split/Caveats.html @@ -0,0 +1,60 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+ + + + + diff --git a/PR_0.0.20/html_split/Compilation-Model.html b/PR_0.0.20/html_split/Compilation-Model.html new file mode 100644 index 00000000..028e3657 --- /dev/null +++ b/PR_0.0.20/html_split/Compilation-Model.html @@ -0,0 +1,66 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

6.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Compile_002dTime-Computation.html b/PR_0.0.20/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..bd0e9b9c --- /dev/null +++ b/PR_0.0.20/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,62 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Context-and-Aim-of-This-Guide.html b/PR_0.0.20/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..b8e16e58 --- /dev/null +++ b/PR_0.0.20/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,81 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+
    +
  • to provide guidelines for content to be covered by courses of various +difficulty levels on C++ (e.g., topics and learning outcomes) +
  • to note some common misunderstandings and problematic points that may be +encountered when teaching particular topics +
  • to suggest resources useful for teaching C++ +
  • to present examples of curriculum for specific courses +
+ +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+
+ + + + + diff --git a/PR_0.0.20/html_split/Contributing-to-This-Document.html b/PR_0.0.20/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..9eda97f9 --- /dev/null +++ b/PR_0.0.20/html_split/Contributing-to-This-Document.html @@ -0,0 +1,60 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +How to Contribute. +

+
+ + + + + diff --git a/PR_0.0.20/html_split/Contributors.html b/PR_0.0.20/html_split/Contributors.html new file mode 100644 index 00000000..93a2bab0 --- /dev/null +++ b/PR_0.0.20/html_split/Contributors.html @@ -0,0 +1,62 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Michael Adams
+rwdougla
+
+
+ + + + + diff --git a/PR_0.0.20/html_split/Detailed-Information-for-Modules-and-Topics.html b/PR_0.0.20/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..22621867 --- /dev/null +++ b/PR_0.0.20/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,64 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PR_0.0.20/html_split/Error-Handling.html b/PR_0.0.20/html_split/Error-Handling.html new file mode 100644 index 00000000..1aa4d5b1 --- /dev/null +++ b/PR_0.0.20/html_split/Error-Handling.html @@ -0,0 +1,64 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘coe’]Categories of Errors‘✔️’✔️
[‘?’]errno???
[‘?’]Error Codes???
[‘eh’]Exception Handling‘✔️’✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Error-handling-Categories-of-errors.html b/PR_0.0.20/html_split/Error-handling-Categories-of-errors.html new file mode 100644 index 00000000..1722d58b --- /dev/null +++ b/PR_0.0.20/html_split/Error-handling-Categories-of-errors.html @@ -0,0 +1,68 @@ + + + + + +Error handling Categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.2 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Error-handling-Error-codes.html b/PR_0.0.20/html_split/Error-handling-Error-codes.html new file mode 100644 index 00000000..af0939ad --- /dev/null +++ b/PR_0.0.20/html_split/Error-handling-Error-codes.html @@ -0,0 +1,73 @@ + + + + + +Error handling Error codes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/External-ie-Non-Standard-Libraries.html b/PR_0.0.20/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..3957305d --- /dev/null +++ b/PR_0.0.20/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,61 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/PR_0.0.20/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..90f73fa7 --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,65 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.9.4 Foundational: Calling static_assert with a constant

+

expression +

+ +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Categories-of-errors.html b/PR_0.0.20/html_split/Foundational-Categories-of-errors.html new file mode 100644 index 00000000..eace79e4 --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Categories-of-errors.html @@ -0,0 +1,64 @@ + + + + + +Foundational Categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.2.4 Foundational: Categories of errors

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Declaring-variables.html b/PR_0.0.20/html_split/Foundational-Declaring-variables.html new file mode 100644 index 00000000..a8d852bc --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Declaring-variables.html @@ -0,0 +1,64 @@ + + + + + +Foundational Declaring variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.10.4 Foundational: Declaring variables

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Defining-variables-and-ODR.html b/PR_0.0.20/html_split/Foundational-Defining-variables-and-ODR.html new file mode 100644 index 00000000..02c8338c --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Defining-variables-and-ODR.html @@ -0,0 +1,64 @@ + + + + + +Foundational Defining variables and ODR (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.11.4 Foundational: Defining variables and ODR

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html b/PR_0.0.20/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html new file mode 100644 index 00000000..0a395b14 --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html @@ -0,0 +1,65 @@ + + + + + +Foundational Handling error codes with stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4 Foundational: Handling error codes with

+

std::error_code +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-How-and-when-are-copies-made.html b/PR_0.0.20/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..5f3d66bd --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,64 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.12.4 Foundational: How and when are copies made

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Standards-exception-hierarchy.html b/PR_0.0.20/html_split/Foundational-Standards-exception-hierarchy.html new file mode 100644 index 00000000..69ff57b7 --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Standards-exception-hierarchy.html @@ -0,0 +1,64 @@ + + + + + +Foundational Standards exception hierarchy (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.10 Foundational: Standards exception hierarchy

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Using-UDLs.html b/PR_0.0.20/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..ef64742a --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,64 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.3.4 Foundational: Using UDLs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/PR_0.0.20/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..b2fe7684 --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,65 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.4.4 Foundational: Using and defining functions with default

+

arguments +

+ +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Using-reference-types-to-avoid-copies.html b/PR_0.0.20/html_split/Foundational-Using-reference-types-to-avoid-copies.html new file mode 100644 index 00000000..5ee570be --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Using-reference-types-to-avoid-copies.html @@ -0,0 +1,64 @@ + + + + + +Foundational Using reference types to avoid copies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

8.4 Foundational: Using reference types to avoid copies

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Foundational-Writing-requires_002dexpressions.html b/PR_0.0.20/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..49a64f75 --- /dev/null +++ b/PR_0.0.20/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,63 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+ +
+

9.8.1 Foundational: Writing requires-expressions

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + + diff --git a/PR_0.0.20/html_split/Functions-default-argument.html b/PR_0.0.20/html_split/Functions-default-argument.html new file mode 100644 index 00000000..a9ef34a6 --- /dev/null +++ b/PR_0.0.20/html_split/Functions-default-argument.html @@ -0,0 +1,68 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.4 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Functions-user_002ddefined-literals.html b/PR_0.0.20/html_split/Functions-user_002ddefined-literals.html new file mode 100644 index 00000000..4475aca9 --- /dev/null +++ b/PR_0.0.20/html_split/Functions-user_002ddefined-literals.html @@ -0,0 +1,68 @@ + + + + + +Functions user-defined literals (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

7.3 Functions: user-defined literals

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Functions.html b/PR_0.0.20/html_split/Functions.html new file mode 100644 index 00000000..1d952bea --- /dev/null +++ b/PR_0.0.20/html_split/Functions.html @@ -0,0 +1,66 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[udl]User-Defined Literals✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Generic-Programming-Templates.html b/PR_0.0.20/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..645751cf --- /dev/null +++ b/PR_0.0.20/html_split/Generic-Programming-Templates.html @@ -0,0 +1,66 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Glossary.html b/PR_0.0.20/html_split/Glossary.html new file mode 100644 index 00000000..dc5d79d0 --- /dev/null +++ b/PR_0.0.20/html_split/Glossary.html @@ -0,0 +1,63 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

13 Glossary

+

Some possible terms to include in the glossary: +

+
    +
  • learning objective +
  • learning outcome +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/How-To-Contribute.html b/PR_0.0.20/html_split/How-To-Contribute.html new file mode 100644 index 00000000..6c32cf6f --- /dev/null +++ b/PR_0.0.20/html_split/How-To-Contribute.html @@ -0,0 +1,94 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to +structure a teaching topic. https://wg21.link/p2193. +
+ +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Inheritance-and-Class-Hierarchies.html b/PR_0.0.20/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..8eab74a3 --- /dev/null +++ b/PR_0.0.20/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,62 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/License.html b/PR_0.0.20/html_split/License.html new file mode 100644 index 00000000..5cfcecd9 --- /dev/null +++ b/PR_0.0.20/html_split/License.html @@ -0,0 +1,105 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+ + + + + + diff --git a/PR_0.0.20/html_split/Main-Advanced-requirements.html b/PR_0.0.20/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..1da3a0c4 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Advanced-requirements.html @@ -0,0 +1,63 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

9.8.2 Main: Advanced requirements

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Contracts-and-static_005fassert.html b/PR_0.0.20/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..af13485b --- /dev/null +++ b/PR_0.0.20/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,64 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.9.5 Main: Contracts and static_assert

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Declarations-for-programs.html b/PR_0.0.20/html_split/Main-Declarations-for-programs.html new file mode 100644 index 00000000..5de56464 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Declarations-for-programs.html @@ -0,0 +1,64 @@ + + + + + +Main Declarations for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.10.5 Main: Declarations for programs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Defining-for-programs.html b/PR_0.0.20/html_split/Main-Defining-for-programs.html new file mode 100644 index 00000000..9f69b093 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Defining-for-programs.html @@ -0,0 +1,65 @@ + + + + + +Main Defining for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

9.11.5 Main: Defining for programs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Designing-APIs-around-stderror_005fcode.html b/PR_0.0.20/html_split/Main-Designing-APIs-around-stderror_005fcode.html new file mode 100644 index 00000000..8aca8df5 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Designing-APIs-around-stderror_005fcode.html @@ -0,0 +1,64 @@ + + + + + +Main Designing APIs around stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.5 Main: Designing APIs around std::error_code

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Exception-guarantees.html b/PR_0.0.20/html_split/Main-Exception-guarantees.html new file mode 100644 index 00000000..090c24f3 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Exception-guarantees.html @@ -0,0 +1,65 @@ + + + + + +Main Exception guarantees (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.11 Main: Exception guarantees

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Handling-different-categories-of-errors.html b/PR_0.0.20/html_split/Main-Handling-different-categories-of-errors.html new file mode 100644 index 00000000..f3eb6952 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Handling-different-categories-of-errors.html @@ -0,0 +1,64 @@ + + + + + +Main Handling different categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.2.5 Main: Handling different categories of errors

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/PR_0.0.20/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..f3c57131 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,64 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.12.5 Main: Implementing user-defined copy operations

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-Using-references-to-modify-external-data.html b/PR_0.0.20/html_split/Main-Using-references-to-modify-external-data.html new file mode 100644 index 00000000..4a81b723 --- /dev/null +++ b/PR_0.0.20/html_split/Main-Using-references-to-modify-external-data.html @@ -0,0 +1,64 @@ + + + + + +Main Using references to modify external data (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

8.5 Main: Using references to modify external data

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-implementing-UDLs.html b/PR_0.0.20/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..e35ea9bb --- /dev/null +++ b/PR_0.0.20/html_split/Main-implementing-UDLs.html @@ -0,0 +1,63 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.3.5 Main: implementing UDLs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Main-implementing-_002a.html b/PR_0.0.20/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..555d8783 --- /dev/null +++ b/PR_0.0.20/html_split/Main-implementing-_002a.html @@ -0,0 +1,64 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.4.5 Main: implementing *

+ + + +
+ + + + + diff --git a/PR_0.0.20/html_split/Meta_002derror-handling-static_005fassert.html b/PR_0.0.20/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..5624ed14 --- /dev/null +++ b/PR_0.0.20/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,68 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.9 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Module-name-Passing-Parameters-by-Reference.html b/PR_0.0.20/html_split/Module-name-Passing-Parameters-by-Reference.html new file mode 100644 index 00000000..33a70057 --- /dev/null +++ b/PR_0.0.20/html_split/Module-name-Passing-Parameters-by-Reference.html @@ -0,0 +1,75 @@ + + + + + +Module name Passing Parameters by Reference (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

9 Module name: Passing Parameters by Reference

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Module-name-Passing-Parameters-by-Value.html b/PR_0.0.20/html_split/Module-name-Passing-Parameters-by-Value.html new file mode 100644 index 00000000..58bf0e92 --- /dev/null +++ b/PR_0.0.20/html_split/Module-name-Passing-Parameters-by-Value.html @@ -0,0 +1,69 @@ + + + + + +Module name Passing Parameters by Value (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

8 Module name: Passing Parameters by Value

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Module-name-Requires-Expressions.html b/PR_0.0.20/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..3adf589b --- /dev/null +++ b/PR_0.0.20/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,63 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

9.7 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ +
    +
  • Overview
  • +
  • Motivation
  • +
+
+ + + + + diff --git a/PR_0.0.20/html_split/Motivation.html b/PR_0.0.20/html_split/Motivation.html new file mode 100644 index 00000000..e2ddfc7b --- /dev/null +++ b/PR_0.0.20/html_split/Motivation.html @@ -0,0 +1,66 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

C++ offers a type safe way of passing around errors, contrary to the +C-style of error handling, by this, we prevent bugs when passing error +codes. Furthermore, error handling with error codes is more commonly +used than exception handling, which only should be used in exceptional +situations and in some environments is not feasible at all, e.g., in +embedded or performance critical software. +

+
+ + + + + diff --git a/PR_0.0.20/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/PR_0.0.20/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..008e35c8 --- /dev/null +++ b/PR_0.0.20/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,83 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/PR_0.0.20/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/PR_0.0.20/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/PR_0.0.20/html_split/ +[Note: The support for this format needs more work (in order to +beautify and fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+
+ + + + + diff --git a/PR_0.0.20/html_split/Organization-of-This-Document.html b/PR_0.0.20/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..2ff1d1af --- /dev/null +++ b/PR_0.0.20/html_split/Organization-of-This-Document.html @@ -0,0 +1,100 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+
    +
  • foundational: This level gives the learner the idea that a facility +exists, what benefits it offers, and the basic ways of using it. + +
  • main: This level shows mainstream uses and techniques. For abstraction +and organizational mechanisms it also demonstrates how to build them. +This level should also give the learner a basic (but not detailed) +understanding of how a facility might be implemented so that the learner +can have a first-order understanding of any costs involved. + +
  • advanced: This level gives information suitable for an expert. For most +topics there is an expert level of knowledge that most programmers +rarely need and techniques that require detailed understanding of +language rules or library implementation. + +
+ +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+
+ + + + + + diff --git a/PR_0.0.20/html_split/Overview.html b/PR_0.0.20/html_split/Overview.html new file mode 100644 index 00000000..d53904f3 --- /dev/null +++ b/PR_0.0.20/html_split/Overview.html @@ -0,0 +1,65 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Points-to-cover.html b/PR_0.0.20/html_split/Points-to-cover.html new file mode 100644 index 00000000..813a5e66 --- /dev/null +++ b/PR_0.0.20/html_split/Points-to-cover.html @@ -0,0 +1,61 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • a brief overview of std::error_code and how to use it +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Preprocessor.html b/PR_0.0.20/html_split/Preprocessor.html new file mode 100644 index 00000000..88f76086 --- /dev/null +++ b/PR_0.0.20/html_split/Preprocessor.html @@ -0,0 +1,63 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/References-on-Learning-Outcomes.html b/PR_0.0.20/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..5d840829 --- /dev/null +++ b/PR_0.0.20/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,75 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

14.1 References on Learning Outcomes

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/References.html b/PR_0.0.20/html_split/References.html new file mode 100644 index 00000000..36fff4d9 --- /dev/null +++ b/PR_0.0.20/html_split/References.html @@ -0,0 +1,61 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PR_0.0.20/html_split/Software-Design.html b/PR_0.0.20/html_split/Software-Design.html new file mode 100644 index 00000000..12438909 --- /dev/null +++ b/PR_0.0.20/html_split/Software-Design.html @@ -0,0 +1,60 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

6.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Standard-Library.html b/PR_0.0.20/html_split/Standard-Library.html new file mode 100644 index 00000000..fa758d0f --- /dev/null +++ b/PR_0.0.20/html_split/Standard-Library.html @@ -0,0 +1,62 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Student-outcomes.html b/PR_0.0.20/html_split/Student-outcomes.html new file mode 100644 index 00000000..acd902a9 --- /dev/null +++ b/PR_0.0.20/html_split/Student-outcomes.html @@ -0,0 +1,69 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain +the message of the error code or check if an error occurred. +
  2. distinguish between the different categories and make justified +decisions when to use which +
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Summary-of-Modules-and-Topics.html b/PR_0.0.20/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..1fc0b8ad --- /dev/null +++ b/PR_0.0.20/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,85 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + +
+ + + + + diff --git a/PR_0.0.20/html_split/Testing-and-Debugging.html b/PR_0.0.20/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..be4410f4 --- /dev/null +++ b/PR_0.0.20/html_split/Testing-and-Debugging.html @@ -0,0 +1,64 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

6.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Tooling.html b/PR_0.0.20/html_split/Tooling.html new file mode 100644 index 00000000..561dbc74 --- /dev/null +++ b/PR_0.0.20/html_split/Tooling.html @@ -0,0 +1,62 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Topic-introduction.html b/PR_0.0.20/html_split/Topic-introduction.html new file mode 100644 index 00000000..3844c932 --- /dev/null +++ b/PR_0.0.20/html_split/Topic-introduction.html @@ -0,0 +1,61 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

C++ offers std::error_code, which encapsulates error codes in a +type safe way. This topic describes how to use these error codes. +

+
+ + + + + diff --git a/PR_0.0.20/html_split/Use-of-This-Document.html b/PR_0.0.20/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..984129cf --- /dev/null +++ b/PR_0.0.20/html_split/Use-of-This-Document.html @@ -0,0 +1,63 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+
+ + + + + diff --git a/PR_0.0.20/html_split/User_002dDefined-Types-Classes.html b/PR_0.0.20/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..f749c966 --- /dev/null +++ b/PR_0.0.20/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,74 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[copy]Copy Semantics✔️✔️
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ +
+ + + + + diff --git a/PR_0.0.20/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/PR_0.0.20/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..bd320ee0 --- /dev/null +++ b/PR_0.0.20/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,74 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PR_0.0.20/html_split/_0023B.html b/PR_0.0.20/html_split/_0023B.html new file mode 100644 index 00000000..9d91e2b4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023B.html @@ -0,0 +1,42 @@ + + + + + + +#B (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #B.

+ diff --git a/PR_0.0.20/html_split/_0023BLD.html b/PR_0.0.20/html_split/_0023BLD.html new file mode 100644 index 00000000..d3ebe521 --- /dev/null +++ b/PR_0.0.20/html_split/_0023BLD.html @@ -0,0 +1,42 @@ + + + + + + +#BLD (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #BLD.

+ diff --git a/PR_0.0.20/html_split/_0023C.html b/PR_0.0.20/html_split/_0023C.html new file mode 100644 index 00000000..df37c629 --- /dev/null +++ b/PR_0.0.20/html_split/_0023C.html @@ -0,0 +1,42 @@ + + + + + + +#C (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #C.

+ diff --git a/PR_0.0.20/html_split/_0023CM.html b/PR_0.0.20/html_split/_0023CM.html new file mode 100644 index 00000000..1699ba77 --- /dev/null +++ b/PR_0.0.20/html_split/_0023CM.html @@ -0,0 +1,42 @@ + + + + + + +#CM (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #CM.

+ diff --git a/PR_0.0.20/html_split/_0023CT.html b/PR_0.0.20/html_split/_0023CT.html new file mode 100644 index 00000000..6312967f --- /dev/null +++ b/PR_0.0.20/html_split/_0023CT.html @@ -0,0 +1,42 @@ + + + + + + +#CT (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #CT.

+ diff --git a/PR_0.0.20/html_split/_0023EH.html b/PR_0.0.20/html_split/_0023EH.html new file mode 100644 index 00000000..3c676996 --- /dev/null +++ b/PR_0.0.20/html_split/_0023EH.html @@ -0,0 +1,42 @@ + + + + + + +#EH (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #EH.

+ diff --git a/PR_0.0.20/html_split/_0023EL.html b/PR_0.0.20/html_split/_0023EL.html new file mode 100644 index 00000000..45f6d36a --- /dev/null +++ b/PR_0.0.20/html_split/_0023EL.html @@ -0,0 +1,42 @@ + + + + + + +#EL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #EL.

+ diff --git a/PR_0.0.20/html_split/_0023F.html b/PR_0.0.20/html_split/_0023F.html new file mode 100644 index 00000000..7cf4dfee --- /dev/null +++ b/PR_0.0.20/html_split/_0023F.html @@ -0,0 +1,42 @@ + + + + + + +#F (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #F.

+ diff --git a/PR_0.0.20/html_split/_0023I.html b/PR_0.0.20/html_split/_0023I.html new file mode 100644 index 00000000..d912afde --- /dev/null +++ b/PR_0.0.20/html_split/_0023I.html @@ -0,0 +1,42 @@ + + + + + + +#I (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #I.

+ diff --git a/PR_0.0.20/html_split/_0023P.html b/PR_0.0.20/html_split/_0023P.html new file mode 100644 index 00000000..bd2bf309 --- /dev/null +++ b/PR_0.0.20/html_split/_0023P.html @@ -0,0 +1,42 @@ + + + + + + +#P (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #P.

+ diff --git a/PR_0.0.20/html_split/_0023SD.html b/PR_0.0.20/html_split/_0023SD.html new file mode 100644 index 00000000..13a000eb --- /dev/null +++ b/PR_0.0.20/html_split/_0023SD.html @@ -0,0 +1,42 @@ + + + + + + +#SD (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #SD.

+ diff --git a/PR_0.0.20/html_split/_0023SL.html b/PR_0.0.20/html_split/_0023SL.html new file mode 100644 index 00000000..b198dd0c --- /dev/null +++ b/PR_0.0.20/html_split/_0023SL.html @@ -0,0 +1,42 @@ + + + + + + +#SL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #SL.

+ diff --git a/PR_0.0.20/html_split/_0023T.html b/PR_0.0.20/html_split/_0023T.html new file mode 100644 index 00000000..013fe871 --- /dev/null +++ b/PR_0.0.20/html_split/_0023T.html @@ -0,0 +1,42 @@ + + + + + + +#T (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #T.

+ diff --git a/PR_0.0.20/html_split/_0023TD.html b/PR_0.0.20/html_split/_0023TD.html new file mode 100644 index 00000000..a11d3257 --- /dev/null +++ b/PR_0.0.20/html_split/_0023TD.html @@ -0,0 +1,42 @@ + + + + + + +#TD (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #TD.

+ diff --git a/PR_0.0.20/html_split/_0023TOOL.html b/PR_0.0.20/html_split/_0023TOOL.html new file mode 100644 index 00000000..39d1c10b --- /dev/null +++ b/PR_0.0.20/html_split/_0023TOOL.html @@ -0,0 +1,42 @@ + + + + + + +#TOOL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #TOOL.

+ diff --git a/PR_0.0.20/html_split/_0023advanced.html b/PR_0.0.20/html_split/_0023advanced.html new file mode 100644 index 00000000..e25198ea --- /dev/null +++ b/PR_0.0.20/html_split/_0023advanced.html @@ -0,0 +1,42 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/PR_0.0.20/html_split/_0023advanced_002d1.html b/PR_0.0.20/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..a6e0009f --- /dev/null +++ b/PR_0.0.20/html_split/_0023advanced_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/PR_0.0.20/html_split/_0023advanced_002d2.html b/PR_0.0.20/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..5bbde172 --- /dev/null +++ b/PR_0.0.20/html_split/_0023advanced_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/PR_0.0.20/html_split/_0023advanced_002d3.html b/PR_0.0.20/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..33c81f87 --- /dev/null +++ b/PR_0.0.20/html_split/_0023advanced_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..8ea66f8e --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..c6d7d691 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d10.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d10.html new file mode 100644 index 00000000..2d0e7814 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-10.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d11.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d11.html new file mode 100644 index 00000000..cffe3ca4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-11.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d12.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d12.html new file mode 100644 index 00000000..fde383ec --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-12.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d13.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d13.html new file mode 100644 index 00000000..5779c1e7 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-13.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d14.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d14.html new file mode 100644 index 00000000..d6ff9f4d --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-14.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d15.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d15.html new file mode 100644 index 00000000..442cda67 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-15.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d16.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d16.html new file mode 100644 index 00000000..41bc3097 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-16.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d17.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d17.html new file mode 100644 index 00000000..6aaaf643 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-17.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d18.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d18.html new file mode 100644 index 00000000..f07d2684 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-18.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d19.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d19.html new file mode 100644 index 00000000..3ec5e5cb --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-19.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..5f97abe0 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d20.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d20.html new file mode 100644 index 00000000..f78da9fc --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-20.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d21.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d21.html new file mode 100644 index 00000000..93305617 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-21.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d22.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d22.html new file mode 100644 index 00000000..facaa97e --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-22.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d23.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d23.html new file mode 100644 index 00000000..f54e6361 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-23.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..d91914d6 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..534eac43 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..ac39ea80 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..1c2c9833 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0078fb60 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..ad7fd991 --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..288a76ad --- /dev/null +++ b/PR_0.0.20/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/PR_0.0.20/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html b/PR_0.0.20/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html new file mode 100644 index 00000000..d0ebbb98 --- /dev/null +++ b/PR_0.0.20/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html @@ -0,0 +1,42 @@ + + + + + + +#c-object-model-declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-declarations.

+ diff --git a/PR_0.0.20/html_split/_0023caveats.html b/PR_0.0.20/html_split/_0023caveats.html new file mode 100644 index 00000000..958b2344 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats.html @@ -0,0 +1,42 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d1.html b/PR_0.0.20/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..cea1d772 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d10.html b/PR_0.0.20/html_split/_0023caveats_002d10.html new file mode 100644 index 00000000..3a6cb56b --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-10.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d11.html b/PR_0.0.20/html_split/_0023caveats_002d11.html new file mode 100644 index 00000000..08177ced --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-11.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d12.html b/PR_0.0.20/html_split/_0023caveats_002d12.html new file mode 100644 index 00000000..2ad12458 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-12.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d13.html b/PR_0.0.20/html_split/_0023caveats_002d13.html new file mode 100644 index 00000000..44240cc1 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-13.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d14.html b/PR_0.0.20/html_split/_0023caveats_002d14.html new file mode 100644 index 00000000..ac79de84 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-14.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d15.html b/PR_0.0.20/html_split/_0023caveats_002d15.html new file mode 100644 index 00000000..7975a463 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-15.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d16.html b/PR_0.0.20/html_split/_0023caveats_002d16.html new file mode 100644 index 00000000..fa0fc542 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-16.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d17.html b/PR_0.0.20/html_split/_0023caveats_002d17.html new file mode 100644 index 00000000..4772dcad --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-17.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d18.html b/PR_0.0.20/html_split/_0023caveats_002d18.html new file mode 100644 index 00000000..14c39ea5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-18.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d19.html b/PR_0.0.20/html_split/_0023caveats_002d19.html new file mode 100644 index 00000000..28b6166b --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-19.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d2.html b/PR_0.0.20/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..5a96c75d --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d20.html b/PR_0.0.20/html_split/_0023caveats_002d20.html new file mode 100644 index 00000000..a0b737a2 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-20.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d21.html b/PR_0.0.20/html_split/_0023caveats_002d21.html new file mode 100644 index 00000000..fabcf642 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-21.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d22.html b/PR_0.0.20/html_split/_0023caveats_002d22.html new file mode 100644 index 00000000..d7f6d005 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-22.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d23.html b/PR_0.0.20/html_split/_0023caveats_002d23.html new file mode 100644 index 00000000..9ba3f280 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-23.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d3.html b/PR_0.0.20/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..38544fd3 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d4.html b/PR_0.0.20/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9a0d75ac --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d5.html b/PR_0.0.20/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..e69246d5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d6.html b/PR_0.0.20/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..eecca657 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d7.html b/PR_0.0.20/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..3a3fa1c0 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d8.html b/PR_0.0.20/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..885f1a14 --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/PR_0.0.20/html_split/_0023caveats_002d9.html b/PR_0.0.20/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..7a9cd86f --- /dev/null +++ b/PR_0.0.20/html_split/_0023caveats_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/PR_0.0.20/html_split/_0023coe_002dadvanced.html b/PR_0.0.20/html_split/_0023coe_002dadvanced.html new file mode 100644 index 00000000..440aa9a4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023coe_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#coe-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #coe-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023coe_002dfound.html b/PR_0.0.20/html_split/_0023coe_002dfound.html new file mode 100644 index 00000000..d721496c --- /dev/null +++ b/PR_0.0.20/html_split/_0023coe_002dfound.html @@ -0,0 +1,42 @@ + + + + + + +#coe-found (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #coe-found.

+ diff --git a/PR_0.0.20/html_split/_0023coe_002dmain.html b/PR_0.0.20/html_split/_0023coe_002dmain.html new file mode 100644 index 00000000..c3e6698a --- /dev/null +++ b/PR_0.0.20/html_split/_0023coe_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#coe-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #coe-main.

+ diff --git a/PR_0.0.20/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/PR_0.0.20/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..ebf42805 --- /dev/null +++ b/PR_0.0.20/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,42 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/PR_0.0.20/html_split/_0023contributing.html b/PR_0.0.20/html_split/_0023contributing.html new file mode 100644 index 00000000..1802b162 --- /dev/null +++ b/PR_0.0.20/html_split/_0023contributing.html @@ -0,0 +1,42 @@ + + + + + + +#contributing (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #contributing.

+ diff --git a/PR_0.0.20/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/PR_0.0.20/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..ac4096b6 --- /dev/null +++ b/PR_0.0.20/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,42 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/PR_0.0.20/html_split/_0023contributors.html b/PR_0.0.20/html_split/_0023contributors.html new file mode 100644 index 00000000..80517a53 --- /dev/null +++ b/PR_0.0.20/html_split/_0023contributors.html @@ -0,0 +1,42 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/PR_0.0.20/html_split/_0023copy.html b/PR_0.0.20/html_split/_0023copy.html new file mode 100644 index 00000000..721eff54 --- /dev/null +++ b/PR_0.0.20/html_split/_0023copy.html @@ -0,0 +1,42 @@ + + + + + + +#copy (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy.

+ diff --git a/PR_0.0.20/html_split/_0023copy_002dadvanced.html b/PR_0.0.20/html_split/_0023copy_002dadvanced.html new file mode 100644 index 00000000..d3f9d3fc --- /dev/null +++ b/PR_0.0.20/html_split/_0023copy_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#copy-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023copy_002dbasic.html b/PR_0.0.20/html_split/_0023copy_002dbasic.html new file mode 100644 index 00000000..a0e471e6 --- /dev/null +++ b/PR_0.0.20/html_split/_0023copy_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#copy-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy-basic.

+ diff --git a/PR_0.0.20/html_split/_0023copy_002dmain.html b/PR_0.0.20/html_split/_0023copy_002dmain.html new file mode 100644 index 00000000..d73f6f81 --- /dev/null +++ b/PR_0.0.20/html_split/_0023copy_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#copy-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy-main.

+ diff --git a/PR_0.0.20/html_split/_0023def.html b/PR_0.0.20/html_split/_0023def.html new file mode 100644 index 00000000..898c843d --- /dev/null +++ b/PR_0.0.20/html_split/_0023def.html @@ -0,0 +1,42 @@ + + + + + + +#def (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def.

+ diff --git a/PR_0.0.20/html_split/_0023def_002dadvanced.html b/PR_0.0.20/html_split/_0023def_002dadvanced.html new file mode 100644 index 00000000..67de68ba --- /dev/null +++ b/PR_0.0.20/html_split/_0023def_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#def-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023def_002dfound.html b/PR_0.0.20/html_split/_0023def_002dfound.html new file mode 100644 index 00000000..eec7dda0 --- /dev/null +++ b/PR_0.0.20/html_split/_0023def_002dfound.html @@ -0,0 +1,42 @@ + + + + + + +#def-found (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def-found.

+ diff --git a/PR_0.0.20/html_split/_0023def_002dmain.html b/PR_0.0.20/html_split/_0023def_002dmain.html new file mode 100644 index 00000000..bf5b3905 --- /dev/null +++ b/PR_0.0.20/html_split/_0023def_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#def-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def-main.

+ diff --git a/PR_0.0.20/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/PR_0.0.20/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..f1de373c --- /dev/null +++ b/PR_0.0.20/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,42 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/PR_0.0.20/html_split/_0023ecodes.html b/PR_0.0.20/html_split/_0023ecodes.html new file mode 100644 index 00000000..d5f80282 --- /dev/null +++ b/PR_0.0.20/html_split/_0023ecodes.html @@ -0,0 +1,42 @@ + + + + + + +#ecodes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #ecodes.

+ diff --git a/PR_0.0.20/html_split/_0023eh_002dadvanced.html b/PR_0.0.20/html_split/_0023eh_002dadvanced.html new file mode 100644 index 00000000..6b433b77 --- /dev/null +++ b/PR_0.0.20/html_split/_0023eh_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#eh-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #eh-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023eh_002dfound.html b/PR_0.0.20/html_split/_0023eh_002dfound.html new file mode 100644 index 00000000..2d7f747d --- /dev/null +++ b/PR_0.0.20/html_split/_0023eh_002dfound.html @@ -0,0 +1,42 @@ + + + + + + +#eh-found (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #eh-found.

+ diff --git a/PR_0.0.20/html_split/_0023eh_002dmain.html b/PR_0.0.20/html_split/_0023eh_002dmain.html new file mode 100644 index 00000000..e624cc11 --- /dev/null +++ b/PR_0.0.20/html_split/_0023eh_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#eh-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #eh-main.

+ diff --git a/PR_0.0.20/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html b/PR_0.0.20/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html new file mode 100644 index 00000000..02eb66cb --- /dev/null +++ b/PR_0.0.20/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html @@ -0,0 +1,42 @@ + + + + + + +#error-handling-categories-of-errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling-categories-of-errors.

+ diff --git a/PR_0.0.20/html_split/_0023foundational_002ddeclaring_002dvariables.html b/PR_0.0.20/html_split/_0023foundational_002ddeclaring_002dvariables.html new file mode 100644 index 00000000..1599f45c --- /dev/null +++ b/PR_0.0.20/html_split/_0023foundational_002ddeclaring_002dvariables.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-declaring-variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-declaring-variables.

+ diff --git a/PR_0.0.20/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies.html b/PR_0.0.20/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies.html new file mode 100644 index 00000000..6e15d360 --- /dev/null +++ b/PR_0.0.20/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-using-reference-types-to-avoid-copies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-reference-types-to-avoid-copies.

+ diff --git a/PR_0.0.20/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies_002d1.html b/PR_0.0.20/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies_002d1.html new file mode 100644 index 00000000..9669e6e3 --- /dev/null +++ b/PR_0.0.20/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-using-reference-types-to-avoid-copies-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-reference-types-to-avoid-copies-1.

+ diff --git a/PR_0.0.20/html_split/_0023func_002dargs.html b/PR_0.0.20/html_split/_0023func_002dargs.html new file mode 100644 index 00000000..5f58a9e9 --- /dev/null +++ b/PR_0.0.20/html_split/_0023func_002dargs.html @@ -0,0 +1,42 @@ + + + + + + +#func-args (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args.

+ diff --git a/PR_0.0.20/html_split/_0023func_002dargs_002dadvanced.html b/PR_0.0.20/html_split/_0023func_002dargs_002dadvanced.html new file mode 100644 index 00000000..eeb8c262 --- /dev/null +++ b/PR_0.0.20/html_split/_0023func_002dargs_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#func-args-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023func_002dargs_002dbasic.html b/PR_0.0.20/html_split/_0023func_002dargs_002dbasic.html new file mode 100644 index 00000000..bb7b70a7 --- /dev/null +++ b/PR_0.0.20/html_split/_0023func_002dargs_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#func-args-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args-basic.

+ diff --git a/PR_0.0.20/html_split/_0023func_002dargs_002dmain.html b/PR_0.0.20/html_split/_0023func_002dargs_002dmain.html new file mode 100644 index 00000000..7879cd10 --- /dev/null +++ b/PR_0.0.20/html_split/_0023func_002dargs_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#func-args-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args-main.

+ diff --git a/PR_0.0.20/html_split/_0023glossary.html b/PR_0.0.20/html_split/_0023glossary.html new file mode 100644 index 00000000..18f2735c --- /dev/null +++ b/PR_0.0.20/html_split/_0023glossary.html @@ -0,0 +1,42 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/PR_0.0.20/html_split/_0023license.html b/PR_0.0.20/html_split/_0023license.html new file mode 100644 index 00000000..342cc9c4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023license.html @@ -0,0 +1,42 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/PR_0.0.20/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html b/PR_0.0.20/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html new file mode 100644 index 00000000..aca7d4b0 --- /dev/null +++ b/PR_0.0.20/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html @@ -0,0 +1,42 @@ + + + + + + +#main-declarations-for-programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-declarations-for-programs.

+ diff --git a/PR_0.0.20/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata.html b/PR_0.0.20/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata.html new file mode 100644 index 00000000..6c16cd16 --- /dev/null +++ b/PR_0.0.20/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata.html @@ -0,0 +1,42 @@ + + + + + + +#main-using-references-to-modify-external-data (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-using-references-to-modify-external-data.

+ diff --git a/PR_0.0.20/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata_002d1.html b/PR_0.0.20/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata_002d1.html new file mode 100644 index 00000000..c4a9f421 --- /dev/null +++ b/PR_0.0.20/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#main-using-references-to-modify-external-data-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-using-references-to-modify-external-data-1.

+ diff --git a/PR_0.0.20/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dreference.html b/PR_0.0.20/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dreference.html new file mode 100644 index 00000000..26eb13ef --- /dev/null +++ b/PR_0.0.20/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dreference.html @@ -0,0 +1,42 @@ + + + + + + +#module-name-passing-parameters-by-reference (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-passing-parameters-by-reference.

+ diff --git a/PR_0.0.20/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dvalue.html b/PR_0.0.20/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dvalue.html new file mode 100644 index 00000000..80ac6e27 --- /dev/null +++ b/PR_0.0.20/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dvalue.html @@ -0,0 +1,42 @@ + + + + + + +#module-name-passing-parameters-by-value (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-passing-parameters-by-value.

+ diff --git a/PR_0.0.20/html_split/_0023motivation.html b/PR_0.0.20/html_split/_0023motivation.html new file mode 100644 index 00000000..768bddf1 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation.html @@ -0,0 +1,42 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d1.html b/PR_0.0.20/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..79e52d8b --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d10.html b/PR_0.0.20/html_split/_0023motivation_002d10.html new file mode 100644 index 00000000..f521dbae --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-10.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d11.html b/PR_0.0.20/html_split/_0023motivation_002d11.html new file mode 100644 index 00000000..dd42fae2 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-11.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d2.html b/PR_0.0.20/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..b587a3b0 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d3.html b/PR_0.0.20/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..e4fdbeaf --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d4.html b/PR_0.0.20/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..0f5663b6 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d5.html b/PR_0.0.20/html_split/_0023motivation_002d5.html new file mode 100644 index 00000000..f35c1896 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-5.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d6.html b/PR_0.0.20/html_split/_0023motivation_002d6.html new file mode 100644 index 00000000..7970b3f9 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-6.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d7.html b/PR_0.0.20/html_split/_0023motivation_002d7.html new file mode 100644 index 00000000..3edee585 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-7.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d8.html b/PR_0.0.20/html_split/_0023motivation_002d8.html new file mode 100644 index 00000000..7218bda3 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-8.

+ diff --git a/PR_0.0.20/html_split/_0023motivation_002d9.html b/PR_0.0.20/html_split/_0023motivation_002d9.html new file mode 100644 index 00000000..3c51ffc5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023motivation_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-9.

+ diff --git a/PR_0.0.20/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/PR_0.0.20/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..6a93df88 --- /dev/null +++ b/PR_0.0.20/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,42 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/PR_0.0.20/html_split/_0023organization_002dof_002dthis_002ddocument.html b/PR_0.0.20/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..37b335b3 --- /dev/null +++ b/PR_0.0.20/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,42 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/PR_0.0.20/html_split/_0023overview.html b/PR_0.0.20/html_split/_0023overview.html new file mode 100644 index 00000000..dec3ed6c --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview.html @@ -0,0 +1,42 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d1.html b/PR_0.0.20/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..2252d07b --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d10.html b/PR_0.0.20/html_split/_0023overview_002d10.html new file mode 100644 index 00000000..4932ea97 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#overview-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-10.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d11.html b/PR_0.0.20/html_split/_0023overview_002d11.html new file mode 100644 index 00000000..e46c65b5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#overview-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-11.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d2.html b/PR_0.0.20/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..18e84557 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d3.html b/PR_0.0.20/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..5c2e1604 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d4.html b/PR_0.0.20/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..0da26646 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d5.html b/PR_0.0.20/html_split/_0023overview_002d5.html new file mode 100644 index 00000000..161a7aa2 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#overview-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-5.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d6.html b/PR_0.0.20/html_split/_0023overview_002d6.html new file mode 100644 index 00000000..aca60580 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#overview-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-6.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d7.html b/PR_0.0.20/html_split/_0023overview_002d7.html new file mode 100644 index 00000000..df40b639 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#overview-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-7.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d8.html b/PR_0.0.20/html_split/_0023overview_002d8.html new file mode 100644 index 00000000..3fa08b3c --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#overview-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-8.

+ diff --git a/PR_0.0.20/html_split/_0023overview_002d9.html b/PR_0.0.20/html_split/_0023overview_002d9.html new file mode 100644 index 00000000..7ef5c763 --- /dev/null +++ b/PR_0.0.20/html_split/_0023overview_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#overview-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-9.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..99dca3ac --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d1.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..e4216ca1 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d10.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d10.html new file mode 100644 index 00000000..25b9fcc6 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-10.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d11.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d11.html new file mode 100644 index 00000000..f237b524 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-11.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d12.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d12.html new file mode 100644 index 00000000..47f334b4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-12.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d13.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d13.html new file mode 100644 index 00000000..4d5a18cc --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-13.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d14.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d14.html new file mode 100644 index 00000000..9ac2710a --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-14.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d15.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d15.html new file mode 100644 index 00000000..8e20e2c4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-15.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d16.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d16.html new file mode 100644 index 00000000..31c6bc4e --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-16.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d17.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d17.html new file mode 100644 index 00000000..16c13972 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-17.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d18.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d18.html new file mode 100644 index 00000000..496e25df --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-18.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d19.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d19.html new file mode 100644 index 00000000..7f969a18 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-19.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d2.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..754e2994 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d20.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d20.html new file mode 100644 index 00000000..b5e35e43 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-20.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d21.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d21.html new file mode 100644 index 00000000..7986e052 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-21.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d22.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d22.html new file mode 100644 index 00000000..1b1761e8 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-22.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d3.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..cc74591e --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d4.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..5b03c52c --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d5.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..42a4781e --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d6.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..aa172cc9 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d7.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..5ba14e9e --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d8.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..20bb3b7f --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d9.html b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d9.html new file mode 100644 index 00000000..df889e49 --- /dev/null +++ b/PR_0.0.20/html_split/_0023points_002dto_002dcover_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-9.

+ diff --git a/PR_0.0.20/html_split/_0023references.html b/PR_0.0.20/html_split/_0023references.html new file mode 100644 index 00000000..295f032b --- /dev/null +++ b/PR_0.0.20/html_split/_0023references.html @@ -0,0 +1,42 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/PR_0.0.20/html_split/_0023references_002don_002dlearning_002doutcomes.html b/PR_0.0.20/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..afd7614e --- /dev/null +++ b/PR_0.0.20/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,42 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/PR_0.0.20/html_split/_0023req_002dexpr.html b/PR_0.0.20/html_split/_0023req_002dexpr.html new file mode 100644 index 00000000..be5fc396 --- /dev/null +++ b/PR_0.0.20/html_split/_0023req_002dexpr.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr.

+ diff --git a/PR_0.0.20/html_split/_0023req_002dexpr_002dadvanced.html b/PR_0.0.20/html_split/_0023req_002dexpr_002dadvanced.html new file mode 100644 index 00000000..0c2f6ebc --- /dev/null +++ b/PR_0.0.20/html_split/_0023req_002dexpr_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023req_002dexpr_002dbasic.html b/PR_0.0.20/html_split/_0023req_002dexpr_002dbasic.html new file mode 100644 index 00000000..e7b6e2be --- /dev/null +++ b/PR_0.0.20/html_split/_0023req_002dexpr_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr-basic.

+ diff --git a/PR_0.0.20/html_split/_0023req_002dexpr_002dmain.html b/PR_0.0.20/html_split/_0023req_002dexpr_002dmain.html new file mode 100644 index 00000000..ff5344d4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023req_002dexpr_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr-main.

+ diff --git a/PR_0.0.20/html_split/_0023static_002dassert.html b/PR_0.0.20/html_split/_0023static_002dassert.html new file mode 100644 index 00000000..da36a13f --- /dev/null +++ b/PR_0.0.20/html_split/_0023static_002dassert.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert.

+ diff --git a/PR_0.0.20/html_split/_0023static_002dassert_002dadvanced.html b/PR_0.0.20/html_split/_0023static_002dassert_002dadvanced.html new file mode 100644 index 00000000..edd65c0e --- /dev/null +++ b/PR_0.0.20/html_split/_0023static_002dassert_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert-advanced.

+ diff --git a/PR_0.0.20/html_split/_0023static_002dassert_002dbasic.html b/PR_0.0.20/html_split/_0023static_002dassert_002dbasic.html new file mode 100644 index 00000000..c56c4c4b --- /dev/null +++ b/PR_0.0.20/html_split/_0023static_002dassert_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert-basic.

+ diff --git a/PR_0.0.20/html_split/_0023static_002dassert_002dmain.html b/PR_0.0.20/html_split/_0023static_002dassert_002dmain.html new file mode 100644 index 00000000..6a543ab9 --- /dev/null +++ b/PR_0.0.20/html_split/_0023static_002dassert_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert-main.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes.html b/PR_0.0.20/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..708bfe9a --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d1.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..32134023 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d10.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d10.html new file mode 100644 index 00000000..b4c873b5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-10.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d11.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d11.html new file mode 100644 index 00000000..3a7942b2 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-11.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d12.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d12.html new file mode 100644 index 00000000..f29e36d4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-12.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d13.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d13.html new file mode 100644 index 00000000..6150518d --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-13.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d14.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d14.html new file mode 100644 index 00000000..2e935354 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-14.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d15.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d15.html new file mode 100644 index 00000000..301528c6 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-15.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d16.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d16.html new file mode 100644 index 00000000..a46285f9 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-16.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d17.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d17.html new file mode 100644 index 00000000..5d521344 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-17.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d18.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d18.html new file mode 100644 index 00000000..17ae7fb1 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-18.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d19.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d19.html new file mode 100644 index 00000000..6825f15f --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-19.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d2.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..64d3027f --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d20.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d20.html new file mode 100644 index 00000000..1024fad4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-20.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d21.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d21.html new file mode 100644 index 00000000..5483b2b1 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-21.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d22.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d22.html new file mode 100644 index 00000000..a76c5900 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-22.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d23.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d23.html new file mode 100644 index 00000000..4052cec5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-23.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d3.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..ad2ab983 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d4.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..892f8724 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d5.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..b186985b --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d6.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..88cc2c22 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d7.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..f7d2c142 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d8.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..503399a1 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/PR_0.0.20/html_split/_0023student_002doutcomes_002d9.html b/PR_0.0.20/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..7d042383 --- /dev/null +++ b/PR_0.0.20/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/PR_0.0.20/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/PR_0.0.20/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..03031b1e --- /dev/null +++ b/PR_0.0.20/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,42 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction.html b/PR_0.0.20/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..761c29e9 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d1.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..0608d324 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d10.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d10.html new file mode 100644 index 00000000..1316b505 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-10.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d11.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d11.html new file mode 100644 index 00000000..c243a02e --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-11.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d2.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..29e91741 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d3.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..480fa322 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d4.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..e99c6f1e --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d5.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d5.html new file mode 100644 index 00000000..3e51900f --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-5.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d6.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d6.html new file mode 100644 index 00000000..624436b4 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-6.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d7.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d7.html new file mode 100644 index 00000000..dbb24806 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-7.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d8.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d8.html new file mode 100644 index 00000000..221f0e00 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-8.

+ diff --git a/PR_0.0.20/html_split/_0023topic_002dintroduction_002d9.html b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d9.html new file mode 100644 index 00000000..3947a1e5 --- /dev/null +++ b/PR_0.0.20/html_split/_0023topic_002dintroduction_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-9.

+ diff --git a/PR_0.0.20/html_split/_0023udl.html b/PR_0.0.20/html_split/_0023udl.html new file mode 100644 index 00000000..4612eca0 --- /dev/null +++ b/PR_0.0.20/html_split/_0023udl.html @@ -0,0 +1,42 @@ + + + + + + +#udl (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #udl.

+ diff --git a/PR_0.0.20/html_split/_0023udl_002dbasic.html b/PR_0.0.20/html_split/_0023udl_002dbasic.html new file mode 100644 index 00000000..bff1ed54 --- /dev/null +++ b/PR_0.0.20/html_split/_0023udl_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#udl-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #udl-basic.

+ diff --git a/PR_0.0.20/html_split/_0023udl_002dmain.html b/PR_0.0.20/html_split/_0023udl_002dmain.html new file mode 100644 index 00000000..fa8fd258 --- /dev/null +++ b/PR_0.0.20/html_split/_0023udl_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#udl-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #udl-main.

+ diff --git a/PR_0.0.20/html_split/_0023use_002dof_002dthis_002ddocument.html b/PR_0.0.20/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..47a11826 --- /dev/null +++ b/PR_0.0.20/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,42 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/PR_0.0.20/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/PR_0.0.20/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..ad40c81d --- /dev/null +++ b/PR_0.0.20/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,42 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/PR_0.0.20/html_split/index.html b/PR_0.0.20/html_split/index.html new file mode 100644 index 00000000..120845b7 --- /dev/null +++ b/PR_0.0.20/html_split/index.html @@ -0,0 +1,357 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

Guidelines for Teaching C++

+ + +
+

Table of Contents

+ +
+ + +
+
+
+
+ + + + + + diff --git a/PR_0.0.20/html_split/unknown_node.html b/PR_0.0.20/html_split/unknown_node.html new file mode 100644 index 00000000..3332b843 --- /dev/null +++ b/PR_0.0.20/html_split/unknown_node.html @@ -0,0 +1,2265 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+
+

+   [Contents]

+
+
+

7.1.5.1 Background/Required Knowledge

+
    +
  • should know how to use reference parameters as an output parameter +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. create an error_code and design API that work with +std:error_code +
  2. write code that utilizes std::error_category +
  3. explain the difference between C-style error handling with errno and +std::error_code +
  4. make effective use of the interface of std::error_code +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.5.3 Caveats

+
    +
  • reset errno before calling a function that might set errno (better pass +an input parameter std::error_code) +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.5.4 Points to cover

+
    +
  • provide a full picture of std::error_code and it’s APIs +
  • std::error_category (explorative) +
+ +
+
+
+

+   [Contents]

+
+

7.1.7 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

7.1.8 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Exception handling is used to be able to continue the program in case of +exceptional situations (like requesting a ridiculous amount of memory: +bad_alloc). +

+
+
+
+
+

+   [Contents]

+
+

7.1.9 Topic introduction

+

Very brief introduction to the topic. +

+

There are other forms of handling difficult situations, but here we +concentrate on exception handling and the peculiarities/characteristics +of it. Because there are different forms, we should know when to use +which type of handling special situations. +

+
+
+
+

+   [Contents]

+
+

7.1.10.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.1.10.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Explain how some std:: calls may cause an exception +
  2. Discern the different standard exception types +
  3. Write simple try … except code (e.g., out of memory, vector at +indexing) +
  4. Explain on a “simplified” conceptual level what happens when an +exception is thrown and is bubbled up through the callers until it is +caught +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.10.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Exceptions should be used for exceptional situations and should not be +used to manage normal control flow. +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.10.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Exception hierarchy from the standard library +
  • Common library functions that may throw exceptions +
  • Basic handling exceptions: try/catch/throw +
  • How exceptions bubble up until caught +
+ +
+
+
+

+   [Contents]

+
+

7.1.11.1 Background/Required Knowledge

+
    +
  • RAII +
  • Order of construction/destruction of class members +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.11.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Explain the four different exception guarantees +
  2. Explain the exception guarantees that the standard library containers +offer. +
  3. Explain what happens when a exception is thrown in constructor +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.11.3 Caveats

+
    +
  • Make sure code is designed with RAII in mind to prevent resources +leaking during exception handling, when the stack is unwound. +
  • Care should be taken in constructor design to make all fully constructed +members deleted when the stack unwinding mechanism is activated. +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.11.4 Points to cover

+
    +
  • Exception guarantees: Nothrow/Strong/Basic/No +
  • Rethrowing an exception +
+ +
+
+
+

+   [Contents]

+
+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Programs can run in a normal state or erroneous state. Students should +be able to identify different types of erroneous state and how to best +handle them. +

+
+
+
+
+

+   [Contents]

+
+

7.2.3 Topic introduction

+

Very brief introduction to the topic. +

+

This topic is an umbrella topic that refers to the different topics for +types of errors and error handling. +

+
+
+
+

+   [Contents]

+
+

7.2.4.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Describe different kinds of errors and exceptional situations that +require different approaches of error handling. +
  2. Provide some examples of the different error categories. +
  3. Identify potential erroneous code sections and attribute them to +different error categories. +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+
+
+
+

+   [Contents]

+
+

7.2.4.4 Points to cover

+

This section lists important details for each point. +

+

Errors can happen at different times during software lifetime. +

+
    +
  • Compile-time errors +
  • Link-time errors +
  • Execution-time errors +
+ +

There are different types of errors +

+
    +
  • Logic errors (violations of logical preconditions) +
  • Run-time errors (errors during code execution due to causes that are +external to the program) +
+ +
+
+
+

+   [Contents]

+
+

7.2.5.1 Background/Required Knowledge

+ +
+
+
+
+

+   [Contents]

+
+

7.2.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. pick the right error handling approach for a given problem. +
  2. enumerate different error handling strategies. +
  3. make a clear distinction between error-handling code and normal-case +handling code +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.5.3 Caveats

+
    +
  • The different error handling strategies have different trade-offs +(runtime performance, readability, …) +
  • The trade-off space depends on the run-time context (embedded, …) +
  • There also exist unhandleable errors (e.g., ODR violations, undefined +behavior) +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.5.4 Points to cover

+ + +
+
+
+
+

+   [Contents]

+
+

7.2.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+
+
+
+

+   [Contents]

+
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • Allows clearer expression of intent in C++. +
  • std::string: "Hello, world!"s +
  • std::chrono: 3h + 10min + 5s +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.3 Topic introduction

+

Very brief introduction to the topic. +

+
    +
  • Explain the existence of user defined literals. Example: +12min + 17s is terse, expressive and type safe. +
+ +
+
+
+

+   [Contents]

+
+

7.3.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+
+
+
+

+   [Contents]

+
+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+
+
+
+

+   [Contents]

+
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • A student gets confused by the similarities and differences between +built-in suffixes and UDLs and between UDLs from different namespaces. +
  • A student “activates” two suffixes with the same signature from +different namespaces. +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.4.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+

+   [Contents]

+
+

7.3.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+
+
+
+

+   [Contents]

+
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+
+
+
+

+   [Contents]

+
+

7.4.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+
+
+

+   [Contents]

+
+

7.4.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.4.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+
+
+
+

+   [Contents]

+
+

7.4.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • When no forward-declaration exists, the definition serves as the +declaration +
  • When multiple declarations exist, only one may specify the default for +any particular parameter, but multiple declarations may specify the +defaults for different parameters. +
  • Additional default values may be specified for other parameters in +repeat declarations +
  • Calling an overloaded function with fewer arguments may be ambiguous +with regard to an overload with default arguments +
+ +
+
+
+
+

+   [Contents]

+
+

7.4.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Default value may only be specified once for each parameter among all +declarations +
  • Default values must start from the rightmost parameter and continue +leftward without gaps +
  • Considerations of when to use default arguments vs overload set +
+ +
+
+
+

+   [Contents]

+
+

7.4.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+
+
+
+

+   [Contents]

+
+

7.4.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

7.4.5.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+
+

+   [Contents]

+
+

7.4.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+
+
+

+   [Contents]

+
+

8.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Level +Objectives +Foundational +Defining and calling functions with values +Main +Advanced +

+
+
+
+
+

+   [Contents]

+
+

8.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

The fundamental element for code-reuse is a function. For functions to +be useful, we need to parameterize them. Understanding how to do such is +thus fundamental to programming in any language. +

+
+
+
+
+

+   [Contents]

+
+

8.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how to define functions with parameters and call them with +values. +

+
+
+
+

+   [Contents]

+
+

8.4.1 Background/Required Knowledge

+

A student is able to: +

+
    +
  • Explain what a function is +
+ +
+
+
+
+

+   [Contents]

+
+

8.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call a function with any number of parameters using the same number of +arguments +
  2. Define a function with any number of parameters +
+ +
+
+
+
+

+   [Contents]

+
+

8.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

8.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • A function is called by invoking the name of the function, followed by +parentheses +
  • For each parameter in the function signature, a value must be provided, +and in the same order +
  • Multiple values passed to a function are comma-separated +
  • When defining a function, you must list the parameters with the type +first, and parameter name second +
+ +
+
+
+

+   [Contents]

+
+

8.5.1 Background/Required Knowledge

+ +
+
+
+
+

+   [Contents]

+
+

8.5.2 Student outcomes

+ +
+
+
+
+

+   [Contents]

+
+

8.5.3 Caveats

+ +
+
+
+
+

+   [Contents]

+
+

8.5.4 Points to cover

+ +
+
+
+
+

+   [Contents]

+
+

8.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

9.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Level +Objectives +Foundational +Avoiding copies using const-reference modifiers +Main +Using references to modify external data +Advanced +

+
+
+
+
+

+   [Contents]

+
+

9.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
+
+
+
+

+   [Contents]

+
+

9.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain what a reference type is and how it constrasts with a value +type. +

+
+
+
+
+

+   [Contents]

+
+

9.4 Foundational: Using reference types to avoid copies

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+
+
+

+   [Contents]

+
+

9.4.1 Background/Required Knowledge

+

A student is able to: +

+
    +
  • Define and call a function with parameters +
+ +
+
+
+
+

+   [Contents]

+
+

9.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Use const-refernce types for function arguments +
  2. Explain what considerations to take when deciding whether or not to use +a const-reference type +
+ +
+
+
+
+

+   [Contents]

+
+

9.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

9.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • No copy of the data is made when taken by constant reference +
  • A constant reference value cannot be modified +
  • The lifetime of a constant reference cannot be expected to extend beyond +the lifetime of the function, so the reference should not be saved off +for future use. +
  • Taking a reference is not always a time or space savings. Modern +machines may use 8-bytes to reference a 4-byte integer, for instance. +
+ +
+
+
+
+
+

+   [Contents]

+
+

9.5 Main: Using references to modify external data

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+
+
+

+   [Contents]

+
+

9.5.1 Background/Required Knowledge

+
    +
  • All of the above +
+ +
+
+
+
+

+   [Contents]

+
+

9.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Define and utilize a non-const reference for passing values out of a +function +
+ +
+
+
+
+

+   [Contents]

+
+

9.5.3 Caveats

+ +
+
+
+
+

+   [Contents]

+
+

9.5.4 Points to cover

+
    +
  • If the function does not intend to modify the value, const-references +should be preferred +
  • A reference value may be modified +
  • The lifetime of a reference cannot be expected to extend beyond the +lifetime of the function, so the reference should not be saved off for +future use. +
  • Taking a reference is not always a time or space savings. Modern +machines may use 8-bytes to reference a 4-byte integer, for instance. +
+ +
+
+
+
+
+

+   [Contents]

+
+

9.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

9.7.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

9.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: concepts] +

+
+
+
+
+

+   [Contents]

+
+

9.8 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + +
+
+
+

+   [Contents]

+
+

9.8.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+
    +
  • The student is aware that attempting to specialize the template with +types or values which do not match otherwise unstated assumptions will +cause errors within the template. +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+
+
+
+

+   [Contents]

+
+

9.8.1.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • All requires-expression requirements terminate with a semicolon. +
  • simple-requirements are used to check that an expression is well-formed. +
  • nested-requirements are introduced with requires and primarily +used to check the result of an expression computable by the compiler, +including concepts or other requires-expressions. +
  • type-requirements are introduced with typename and used to verify +the existence of a type with a particular identifier. +
  • compound-requirements are enclosed in braces and can be used to check +the resulting type of an expression. +
  • Checks are performed by the compiler, not at run time. +
  • If covering usage of requires-expression with requires-clause, +[Compile-time programming: +requires clause] demonstrate requires requires and show how to +ever avoid writing it by using a concept. +[Compile-time programming: concepts] +
+ +
+
+
+

+   [Contents]

+
+

9.8.2.1 Background/Required Knowledge

+
    +
  • All of the above. +
  • Knowledge of noexcept +
+ +

A student is able to: +

+ + +
+
+
+
+

+   [Contents]

+
+

9.8.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

9.8.2.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Compound-requirements allow the optional ability to test whether an +expression is marked as noexcept, by using a trailing +noexcept keyword. +
+ +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+
    +
  • If the return-type-requirement of a compound-requirement is a concept, +that concept is given the resulting type as the first parameter, +followed by the specified parameters in the compound-requirement. +{ ++x } -> C<int> would substitute +C<decltype((++x)), int> and check that concept C is satisfied for +those parameters. +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.3 Advanced

+

See user-defined-literals. +

+
+
+
+

+   [Contents]

+
+

9.9.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

9.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+
+
+
+

+   [Contents]

+
+

9.9.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+
+
+

+   [Contents]

+
+

9.9.4.1 Background/Required Knowledge

+

A student: +

+
    +
  • Should be able to explain the difference between code evaluated at +compile-time and run-time +
  • Should be able to cite some examples of compile-time known information, +such as sizeof(T) +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

9.9.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • X +
  • In addition to what is wrong, a good error message will inform the user +of how to correct it +
+ +
+
+
+

+   [Contents]

+
+

9.9.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
  • General understanding of compile-time requirements +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

9.9.5.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • When writing a meta-function, use static_assert to test the +results +
  • Write static_assert calls at the scope of the code they are +guarding +
+ +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+
+
+
+

+   [Contents]

+
+

9.9.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

9.10.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+ +
+
+
+
+

+   [Contents]

+
+

9.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • Introduces a name and it’s type +
  • int baz; +
  • void bar(); +
  • class Foo; +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.3 Topic introduction

+

Very brief introduction to the topic. +

+

Introduce names and their associated type in a scope. +

+
+
+
+

+   [Contents]

+
+

9.10.4.1 Background/Required Knowledge

+

A student: +

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type) +
    • int (Integer type) +
    • double (Floating-point type) +
    + +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. declare a variable with a specific type ‘int baz;’ +
  2. declare a function ‘void bar();’ +
  3. declare a class ‘class Foo;’ +
  4. forward declare a user-defined type or a function +
  5. explain the difference between a definition and a declaration +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+
+
+
+

+   [Contents]

+
+

9.10.4.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+

+   [Contents]

+
+

9.10.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
  • Basic template syntax +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. create header and source files with a declaration in the former and +definition of a variable/function in the latter +
  2. declare type aliases to introduce a type with an alternative name ‘using +std::string;’ +
  3. write a forward template declaration +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Declaring aliases can introduce name clashes +
  • Prefer using declaration’s over using directives in header files [link] +
  • The order of declarations dictates the order of initialization +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.5.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+
+

+   [Contents]

+
+

9.10.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • asm declaration +
  • using-enum-declaration +
  • extern “C” declarations +
+ +
+
+
+

+   [Contents]

+
+

9.11.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+ +
+
+
+
+

+   [Contents]

+
+

9.11.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • A definition is a declaration that supplies all that is needed for a +complete entity +
  • int baz = 42; +
  • void bar() { /* implementation */ } +
  • class Foo { /* class body */ }; +
+ +
+
+
+
+

+   [Contents]

+
+

9.11.3 Topic introduction

+

Very brief introduction to the topic. +

+

A definition extends a declaration, providing all that is needed for a +complete entity, e.g., allocate memory for variables, provide the +implementation for functions, complete definitions of data and function +members of a class. +

+
+
+
+

+   [Contents]

+
+

9.11.4.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

9.11.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. define a variable with a specific type int baz = 42; +
  2. define a function void bar() {} +
  3. define a class class Foo {}; +
  4. explain the one definition rule +
+ +
+
+
+
+

+   [Contents]

+
+

9.11.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+
+
+
+

+   [Contents]

+
+

9.11.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • One definition rule (ODR) +
+ +
+
+
+

+   [Contents]

+
+

9.11.5.1 Background/Required Knowledge

+ + +
+
+
+
+

+   [Contents]

+
+

9.11.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. organize variables, functions, classes into multiple translation units, +describing interface with declarations and providing the implementations +with definitions without violating ODR. +
  2. distinguish between template declaration and definition +
+ +
+
+
+
+

+   [Contents]

+
+

9.11.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Putting a definition into a header file that is included more than once +leads to ODR violations, possibly resulting in linker errors. +
+ +
+
+
+
+

+   [Contents]

+
+

9.11.5.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+

+   [Contents]

+
+

9.12.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ +
+
+
+
+

+   [Contents]

+
+

9.12.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+
+
+
+
+

+   [Contents]

+
+

9.12.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+
+
+
+

+   [Contents]

+
+

9.12.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * explain what +an object is? [C++ object model: +objects], [C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+
+
+
+
+

+   [Contents]

+
+

9.12.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ +
    +
  • establishing “equivalent” object state in another object +
+ +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+
+
+
+
+

+   [Contents]

+
+

9.12.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Compiler-provided copy operations may result in ownership problems +(e.g., char*). These ownership problems can generally be solved +by using types whose copy operations have the appropriate semantics, +e.g., std::string instead of char* to hold string values. +
+ +
+
+
+
+

+   [Contents]

+
+

9.12.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero +
    • Copying of types, with user defined copy operations +
    • Copying an object does not change the original +
    + +
  • Practical applications +
      +
    • std::unique_ptr (has no copy) +
    • Strings (copies the value) +
    + +
+ +
+
+
+

+   [Contents]

+
+

9.12.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+
+
+
+

+   [Contents]

+
+

9.12.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+
+
+
+

+   [Contents]

+
+

9.12.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 +std::auto_ptr) +
    + +
+ +
+
+
+
+

+   [Contents]

+
+

9.12.5.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations +
    • =default, =delete (No copy) +
    • How-to write your own copy operations +
    • Rule-of-five +
    • Copy assignment operators can be ref-qualified to avoid assigning into +temporary objects. +
    + +
+ +
+
+
+
+

+   [Contents]

+
+

9.12.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+

See concepts. +

+
+ + + + + diff --git a/PR_0.0.21/guidelines.epub b/PR_0.0.21/guidelines.epub new file mode 100644 index 00000000..cfbc27a7 Binary files /dev/null and b/PR_0.0.21/guidelines.epub differ diff --git a/PR_0.0.21/html/images/cpp_logo.png b/PR_0.0.21/html/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/PR_0.0.21/html/images/cpp_logo.png differ diff --git a/PR_0.0.21/html/index.html b/PR_0.0.21/html/index.html new file mode 100644 index 00000000..29f5b8c0 --- /dev/null +++ b/PR_0.0.21/html/index.html @@ -0,0 +1,2263 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version PR_0.0.21

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/PR_0.0.21/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/PR_0.0.21/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/PR_0.0.21/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations???
[def]Definitions✔️✔️✔️
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[coe]Categories of Errors✔️✔️
[?]errno???
[?]Error Codes???
[eh]Exception Handling✔️✔️✔️
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

7.1.4 Foundational: Calling static_assert with a constant expression

+

7.1.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

7.1.5 Main: Contracts and static_assert

+

7.1.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.2 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

C++ offers a type safe way of passing around errors, contrary to the C-style of error handling, by this, we prevent bugs when passing error codes. Furthermore, error handling with error codes is more commonly used than exception handling, which only should be used in exceptional situations and in some environments is not feasible at all, e.g., in embedded or performance critical software.

+

7.2.3 Topic introduction

+

Very brief introduction to the topic.

+

C++ offers std::error_code, which encapsulates error codes in a type safe way. This topic describes how to use these error codes.

+

7.2.4 Foundational: Handling error codes with std::error_code

+

7.2.4.1 Background/Required Knowledge

+

A student:

+ +

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain the message of the error code or check if an error occurred.
  2. +
  3. distinguish between the different categories and make justified decisions when to use which
  4. +
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.2.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • a brief overview of std::error_code and how to use it
  • +
+

7.2.5 Main: Designing APIs around std::error_code

+

7.2.5.1 Background/Required Knowledge

+
    +
  • should know how to use reference parameters as an output parameter
  • +
+

7.2.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. create an error_code and design API that work with std:error_code
  2. +
  3. write code that utilizes std::error_category
  4. +
  5. explain the difference between C-style error handling with errno and std::error_code
  6. +
  7. make effective use of the interface of std::error_code
  8. +
+

7.2.5.3 Caveats

+
    +
  • reset errno before calling a function that might set errno (better pass an input parameter std::error_code)
  • +
+

7.2.5.4 Points to cover

+
    +
  • provide a full picture of std::error_code and it’s APIs
  • +
  • std::error_category (explorative)
  • +
+

7.2.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • implementing your own error_category
  • +
+

7.3 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Programs can run in a normal state or erroneous state. Students should be able to identify different types of erroneous state and how to best handle them.

+

7.3.3 Topic introduction

+

Very brief introduction to the topic.

+

This topic is an umbrella topic that refers to the different topics for types of errors and error handling.

+

7.3.4 Foundational: Categories of errors

+

7.3.4.1 Background/Required Knowledge

+

A student:

+ +

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Describe different kinds of errors and exceptional situations that require different approaches of error handling.
  2. +
  3. Provide some examples of the different error categories.
  4. +
  5. Identify potential erroneous code sections and attribute them to different error categories.
  6. +
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.3.4.4 Points to cover

+

This section lists important details for each point.

+

Errors can happen at different times during software lifetime.

+
    +
  • Compile-time errors
  • +
  • Link-time errors
  • +
  • Execution-time errors
  • +
+

There are different types of errors

+
    +
  • Logic errors (violations of logical preconditions)
  • +
  • Run-time errors (errors during code execution due to causes that are external to the program)
  • +
+

7.3.5 Main: Handling different categories of errors

+

7.3.5.1 Background/Required Knowledge

+

7.3.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. pick the right error handling approach for a given problem.
  2. +
  3. enumerate different error handling strategies.
  4. +
  5. make a clear distinction between error-handling code and normal-case handling code
  6. +
+

7.3.5.3 Caveats

+
    +
  • The different error handling strategies have different trade-offs (runtime performance, readability, …)
  • +
  • The trade-off space depends on the run-time context (embedded, …)
  • +
  • There also exist unhandleable errors (e.g., ODR violations, undefined behavior)
  • +
+

7.3.5.4 Points to cover

+ +

7.3.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.3.7 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+

7.3.8 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Exception handling is used to be able to continue the program in case of exceptional situations (like requesting a ridiculous amount of memory: bad_alloc).

+

7.3.9 Topic introduction

+

Very brief introduction to the topic.

+

There are other forms of handling difficult situations, but here we concentrate on exception handling and the peculiarities/characteristics of it. Because there are different forms, we should know when to use which type of handling special situations.

+

7.3.10 Foundational: Standards exception hierarchy

+

7.3.10.1 Background/Required Knowledge

+

A student:

+ +

7.3.10.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Explain how some std:: calls may cause an exception
  2. +
  3. Discern the different standard exception types
  4. +
  5. Write simple try … except code (e.g., out of memory, vector at indexing)
  6. +
  7. Explain on a “simplified” conceptual level what happens when an exception is thrown and is bubbled up through the callers until it is caught
  8. +
+

7.3.10.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Exceptions should be used for exceptional situations and should not be used to manage normal control flow.
  • +
+

7.3.10.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Exception hierarchy from the standard library
  • +
  • Common library functions that may throw exceptions
  • +
  • Basic handling exceptions: try/catch/throw
  • +
  • How exceptions bubble up until caught
  • +
+

7.3.11 Main: Exception guarantees

+

7.3.11.1 Background/Required Knowledge

+
    +
  • RAII
  • +
  • Order of construction/destruction of class members
  • +
+

7.3.11.2 Student outcomes

+

A student should be able to:

+
    +
  1. Explain the four different exception guarantees
  2. +
  3. Explain the exception guarantees that the standard library containers offer.
  4. +
  5. Explain what happens when a exception is thrown in constructor
  6. +
+

7.3.11.3 Caveats

+
    +
  • Make sure code is designed with RAII in mind to prevent resources leaking during exception handling, when the stack is unwound.
  • +
  • Care should be taken in constructor design to make all fully constructed members deleted when the stack unwinding mechanism is activated.
  • +
+

7.3.11.4 Points to cover

+
    +
  • Exception guarantees: Nothrow/Strong/Basic/No
  • +
  • Rethrowing an exception
  • +
+

7.3.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • Rethrowing a modified exception
  • +
  • Writing exception safe containers
  • +
+

7.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

7.5 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

7.5.1 Foundational: Writing requires-expressions

+

7.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

7.5.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

7.5.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

7.5.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

7.5.2 Main: Advanced requirements

+

7.5.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

7.5.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

7.5.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.5.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

7.5.3 Advanced

+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.6.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.6.4 Foundational: Using and defining functions with default arguments

+

7.6.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.6.5 Main: implementing *

+

7.6.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.6.5.4 Points to cover

+

This section lists important details for each point.

+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

7.7 Functions: user-defined literals (UDL)

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Literals are a way to write values in the code, such as strings and numbers. User-defined literals (UDL) allow to add a suffix to a string or number to change the meaning. The suffix selects a function (an operator) that can alter the value and type of the literal. The C++ library provides certain operators already and a user can add more by providing such operators.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.7.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.7.4 Foundational: Using UDLs

+

7.7.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.7.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.7.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.7.4.4 Points to cover

+

This section lists important details for each point.

+

7.7.5 Main: implementing UDLs

+

7.7.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.7.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.7.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8 Module name: Passing Parameters by Value

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ + + + + + + + + + + + + + + + + +
+Level + +Objectives +
+Foundational + +Defining and calling functions with values +
+Main + +
+Advanced + +
+

8.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

The fundamental element for code-reuse is a function. For functions to be useful, we need to parameterize them. Understanding how to do such is thus fundamental to programming in any language.

+

8.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how to define functions with parameters and call them with values.

+

8.4 Foundational: Using reference types to avoid copies

+

8.4.1 Background/Required Knowledge

+

A student is able to:

+
    +
  • Explain what a function is
  • +
+

8.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call a function with any number of parameters using the same number of arguments
  2. +
  3. Define a function with any number of parameters
  4. +
+

8.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • A function is called by invoking the name of the function, followed by parentheses
  • +
  • For each parameter in the function signature, a value must be provided, and in the same order
  • +
  • Multiple values passed to a function are comma-separated
  • +
  • When defining a function, you must list the parameters with the type first, and parameter name second
  • +
+

8.5 Main: Using references to modify external data

+

8.5.1 Background/Required Knowledge

+

8.5.2 Student outcomes

+

8.5.3 Caveats

+

8.5.4 Points to cover

+

8.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Module name: Passing Parameters by Reference

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ + + + + + + + + + + + + + + + + +
+Level + +Objectives +
+Foundational + +Avoiding copies using const-reference modifiers +
+Main + +Using references to modify external data +
+Advanced + +
+

9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

9.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain what a reference type is and how it constrasts with a value type.

+

9.4 Foundational: Using reference types to avoid copies

+

9.4.1 Background/Required Knowledge

+

A student is able to:

+
    +
  • Define and call a function with parameters
  • +
+

9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Use const-refernce types for function arguments
  2. +
  3. Explain what considerations to take when deciding whether or not to use a const-reference type
  4. +
+

9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • No copy of the data is made when taken by constant reference
  • +
  • A constant reference value cannot be modified
  • +
  • The lifetime of a constant reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use.
  • +
  • Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance.
  • +
+

9.5 Main: Using references to modify external data

+

9.5.1 Background/Required Knowledge

+
    +
  • All of the above
  • +
+

9.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. Define and utilize a non-const reference for passing values out of a function
  2. +
+

9.5.3 Caveats

+

9.5.4 Points to cover

+
    +
  • If the function does not intend to modify the value, const-references should be preferred
  • +
  • A reference value may be modified
  • +
  • The lifetime of a reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use.
  • +
  • Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance.
  • +
+

9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9.7 Module name: Build systems

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
Foundational— Knowledge about build systems
Main— Usage of build system to compile a executable
Advanced— Add external libraries as a dependencies
+

9.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Building complex C++ projects by hand is tricky
  • +
  • Build systems can help to resolve dependencies
  • +
  • Build systems can help do distribute C++ code and help other to compile the code
  • +
  • Build systems can help to find and include libraries as dependencies
  • +
  • Build systems faciliate project management
  • +
  • All major C++ projects are distributed with build systems
  • +
+

9.7.3 Topic introduction

+

Very brief introduction to the topic.

+

Build systems are used to configure, build, and install complex C++ projects.

+

9.7.4 Foundational: Knowledge about build systems

+

9.7.4.1 Background/Required Knowledge

+

A student: * Should know how to compile and link C++ programs

+

9.7.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. To explain what a build system is
  2. +
  3. To explain that a build systems resolves dependencies
  4. +
  5. To explain that a build system supports compilation for different operating systems and architectures
  6. +
+

9.7.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

None

+

9.7.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Mention that many build systems are available for C++
  • +
  • Mention benefits and challenges
  • +
  • Build system help to only compile the C++ files with code changes and not the complete project
  • +
+

9.7.5 Main: Usage of build system to compile a executable

+

9.7.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

9.7.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. Download a C++ package and build the package
  2. +
  3. Write a configuration file to compile a C++ executable
  4. +
  5. Pass compiler options via the build system
  6. +
  7. Use the build system to generate the executable
  8. +
  9. Write a configuration file to compile a library and link the library to a C++ executable
  10. +
+

9.7.5.3 Caveats

+

The instructions are restricted to the chosen build system and not easily transferable.

+

9.7.5.4 Points to cover

+
    +
  • Include paths to header files to the configuration
  • +
  • Adding compiler flags
  • +
  • How to build Release and Debug builds
  • +
  • Linking external libraries to the C++ project
  • +
  • Support compilation on different operating systems, compilers, and architectures
  • +
+

9.7.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • How to build libraries
  • +
  • How to have external libraries be downloaded during the build process
  • +
  • Mention that build systems provide support for unit testing
  • +
+

See user-defined-literals.

+

9.8 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.8.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+

9.8.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • A definition is a declaration that supplies all that is needed for a complete entity
  • +
  • int baz = 42;
  • +
  • void bar() { /* implementation */ }
  • +
  • class Foo { /* class body */ };
  • +
+

9.8.3 Topic introduction

+

Very brief introduction to the topic.

+

A definition extends a declaration, providing all that is needed for a complete entity, e.g., allocate memory for variables, provide the implementation for functions, complete definitions of data and function members of a class.

+

9.8.4 Foundational: Defining variables and ODR

+

9.8.4.1 Background/Required Knowledge

+

A student:

+ +

9.8.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. define a variable with a specific type int baz = 42;
  2. +
  3. define a function void bar() {}
  4. +
  5. define a class class Foo {};
  6. +
  7. explain the one definition rule
  8. +
+

9.8.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

9.8.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • One definition rule (ODR)
  • +
+

9.8.5 Main: Defining for programs

+

9.8.5.1 Background/Required Knowledge

+ +

9.8.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. organize variables, functions, classes into multiple translation units, describing interface with declarations and providing the implementations with definitions without violating ODR.
  2. +
  3. distinguish between template declaration and definition
  4. +
+

9.8.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Putting a definition into a header file that is included more than once leads to ODR violations, possibly resulting in linker errors.
  • +
+

9.8.5.4 Points to cover

+

This section lists important details for each point.

+

9.8.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • ABI Incompatibilities: Different definitions of the same type in multiple object files can lead to subtle program errors.
  • +
+

9.9 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

9.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

9.9.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

9.9.4 Foundational: How and when are copies made

+

9.9.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

9.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

9.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

9.9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

9.9.5 Main: Implementing user-defined copy operations

+

9.9.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

9.9.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

9.9.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

9.9.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

9.9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

9.10 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.10.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+

9.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Introduces a name and it’s type
  • +
  • int baz;
  • +
  • void bar();
  • +
  • class Foo;
  • +
+

9.10.3 Topic introduction

+

Very brief introduction to the topic.

+

Introduce names and their associated type in a scope.

+

9.10.4 Foundational: Declaring variables

+

9.10.4.1 Background/Required Knowledge

+

A student:

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type)
    • +
    • int (Integer type)
    • +
    • double (Floating-point type)
    • +
  • +
+

9.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. declare a variable with a specific type ‘int baz;’
  2. +
  3. declare a function ‘void bar();’
  4. +
  5. declare a class ‘class Foo;’
  6. +
  7. forward declare a user-defined type or a function
  8. +
  9. explain the difference between a definition and a declaration
  10. +
+

9.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

9.10.4.4 Points to cover

+

This section lists important details for each point.

+

9.10.5 Main: Declarations for programs

+

9.10.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Basic template syntax
  • +
+

9.10.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. create header and source files with a declaration in the former and definition of a variable/function in the latter
  2. +
  3. declare type aliases to introduce a type with an alternative name ‘using std::string;’
  4. +
  5. write a forward template declaration
  6. +
+

9.10.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Declaring aliases can introduce name clashes
  • +
  • Prefer using declaration’s over using directives in header files [link]
  • +
  • The order of declarations dictates the order of initialization
  • +
+

9.10.5.4 Points to cover

+

This section lists important details for each point.

+

9.10.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • asm declaration
  • +
  • using-enum-declaration
  • +
  • extern “C” declarations
  • +
+

See concepts.

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Frank Birbacher
+Michael Adams
+Patrick Diehl
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ + +
+ + diff --git a/PR_0.0.21/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html b/PR_0.0.21/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html new file mode 100644 index 00000000..1d0852d4 --- /dev/null +++ b/PR_0.0.21/html_split/Advanced-Exception_002dsafe-containers-and-edge-cases.html @@ -0,0 +1,65 @@ + + + + + +Advanced Exception-safe containers and edge cases (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.3.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • Rethrowing a modified exception +
  • Writing exception safe containers +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Advanced-Special-cases-and-peculiarities.html b/PR_0.0.21/html_split/Advanced-Special-cases-and-peculiarities.html new file mode 100644 index 00000000..be5ea2f2 --- /dev/null +++ b/PR_0.0.21/html_split/Advanced-Special-cases-and-peculiarities.html @@ -0,0 +1,65 @@ + + + + + +Advanced Special cases and peculiarities (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.8.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • ABI Incompatibilities: Different definitions of the same type in +multiple object files can lead to subtle program errors. +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Advanced.html b/PR_0.0.21/html_split/Advanced.html new file mode 100644 index 00000000..5d758bc0 --- /dev/null +++ b/PR_0.0.21/html_split/Advanced.html @@ -0,0 +1,60 @@ + + + + + +Advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Background_002fRequired-Knowledge.html b/PR_0.0.21/html_split/Background_002fRequired-Knowledge.html new file mode 100644 index 00000000..ee4c3004 --- /dev/null +++ b/PR_0.0.21/html_split/Background_002fRequired-Knowledge.html @@ -0,0 +1,64 @@ + + + + + +Background/Required Knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.1 Background/Required Knowledge

+

A student: +

+
    +
  • Should be able to explain the difference between code evaluated at +compile-time and run-time +
  • Should be able to cite some examples of compile-time known information, +such as sizeof(T) +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Background_002fRequired-knowledge.html b/PR_0.0.21/html_split/Background_002fRequired-knowledge.html new file mode 100644 index 00000000..dd14fb17 --- /dev/null +++ b/PR_0.0.21/html_split/Background_002fRequired-knowledge.html @@ -0,0 +1,58 @@ + + + + + +Background/Required knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+ +
+

7.6.5.1 Background/Required knowledge

+
    +
  • All of the above. +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html b/PR_0.0.21/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html new file mode 100644 index 00000000..fbe3431a --- /dev/null +++ b/PR_0.0.21/html_split/Basics-Types-Objects-Values-Expressions-Statements-and-Control_002dFlow-Constructs.html @@ -0,0 +1,66 @@ + + + + + +Basics Types Objects Values Expressions Statements and Control-Flow Constructs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and

+

Control-Flow Constructs +

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Objects???
[‘?’]Declarations???
[def]Definitions‘✔️’✔️✔️
[‘?’]Selection Constructs (e.g., if, ternary)???
[‘?’]Looping Constructs (e.g., for, while, etc.)???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Building.html b/PR_0.0.21/html_split/Building.html new file mode 100644 index 00000000..2429fdf0 --- /dev/null +++ b/PR_0.0.21/html_split/Building.html @@ -0,0 +1,62 @@ + + + + + +Building (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.12 Building

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Software Build Tools???
[‘?’]Strategies for Handling Build Problems???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/C_002b_002b-object-model-Declarations.html b/PR_0.0.21/html_split/C_002b_002b-object-model-Declarations.html new file mode 100644 index 00000000..cf35adbc --- /dev/null +++ b/PR_0.0.21/html_split/C_002b_002b-object-model-Declarations.html @@ -0,0 +1,68 @@ + + + + + +C++ object model Declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.10 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/C_002b_002b-object-model-Definitions.html b/PR_0.0.21/html_split/C_002b_002b-object-model-Definitions.html new file mode 100644 index 00000000..8f964b0c --- /dev/null +++ b/PR_0.0.21/html_split/C_002b_002b-object-model-Definitions.html @@ -0,0 +1,69 @@ + + + + + +C++ object model Definitions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.8 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/C_002b_002b-object-model-copy-semantics.html b/PR_0.0.21/html_split/C_002b_002b-object-model-copy-semantics.html new file mode 100644 index 00000000..6523afde --- /dev/null +++ b/PR_0.0.21/html_split/C_002b_002b-object-model-copy-semantics.html @@ -0,0 +1,68 @@ + + + + + +C++ object model copy semantics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

9.9 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Caveats.html b/PR_0.0.21/html_split/Caveats.html new file mode 100644 index 00000000..47c0811b --- /dev/null +++ b/PR_0.0.21/html_split/Caveats.html @@ -0,0 +1,60 @@ + + + + + +Caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Compilation-Model.html b/PR_0.0.21/html_split/Compilation-Model.html new file mode 100644 index 00000000..028e3657 --- /dev/null +++ b/PR_0.0.21/html_split/Compilation-Model.html @@ -0,0 +1,66 @@ + + + + + +Compilation Model (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

6.1 Compilation Model

+ + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Translation Units???
[‘?’]Headers???
[‘?’]Modules???
[‘?’]Name Mangling???
[‘?’]Phases of Translation???
[‘?’]Separate Compilation???
[‘?’]Linkage???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Compile_002dTime-Computation.html b/PR_0.0.21/html_split/Compile_002dTime-Computation.html new file mode 100644 index 00000000..bd0e9b9c --- /dev/null +++ b/PR_0.0.21/html_split/Compile_002dTime-Computation.html @@ -0,0 +1,62 @@ + + + + + +Compile-Time Computation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.7 Compile-Time Computation

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Context-and-Aim-of-This-Guide.html b/PR_0.0.21/html_split/Context-and-Aim-of-This-Guide.html new file mode 100644 index 00000000..b8e16e58 --- /dev/null +++ b/PR_0.0.21/html_split/Context-and-Aim-of-This-Guide.html @@ -0,0 +1,81 @@ + + + + + +Context and Aim of This Guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to +assist in the preparation of courses on C++ in a variety of settings, +including university, college, and industry environments. The main +objectives of this document are as follows: +

+
    +
  • to provide guidelines for content to be covered by courses of various +difficulty levels on C++ (e.g., topics and learning outcomes) +
  • to note some common misunderstandings and problematic points that may be +encountered when teaching particular topics +
  • to suggest resources useful for teaching C++ +
  • to present examples of curriculum for specific courses +
+ +

This document does not itself provide a curriculum for a single specific +course, but is rather a set of guidelines that can be used to prepare +curricula for a wide variety of courses that differ in focus and level +of sophistication. (This said, however, some links to other documents +with examples of curricula for specific courses may be included herein.) +This document only intends to target the teaching of the most recently +ratified version of the C++ standard. (This said, however, since older +versions of this document are also available, these older versions may +be of some use to those who need guidance in older versions of the +standard, at least versions that do not predate C++20.) +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Contributing-to-This-Document.html b/PR_0.0.21/html_split/Contributing-to-This-Document.html new file mode 100644 index 00000000..9eda97f9 --- /dev/null +++ b/PR_0.0.21/html_split/Contributing-to-This-Document.html @@ -0,0 +1,60 @@ + + + + + +Contributing to This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help +with this project as a contributor, please read the section +How to Contribute. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Contributors.html b/PR_0.0.21/html_split/Contributors.html new file mode 100644 index 00000000..9aea7e05 --- /dev/null +++ b/PR_0.0.21/html_split/Contributors.html @@ -0,0 +1,64 @@ + + + + + +Contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

11 Contributors

+ +
Christopher Di Bella
+Florian Sattler
+Frank Birbacher
+Michael Adams
+Patrick Diehl
+rwdougla
+
+
+ + + + + diff --git a/PR_0.0.21/html_split/Detailed-Information-for-Modules-and-Topics.html b/PR_0.0.21/html_split/Detailed-Information-for-Modules-and-Topics.html new file mode 100644 index 00000000..3185e9c6 --- /dev/null +++ b/PR_0.0.21/html_split/Detailed-Information-for-Modules-and-Topics.html @@ -0,0 +1,67 @@ + + + + + +Detailed Information for Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PR_0.0.21/html_split/Error-Handling.html b/PR_0.0.21/html_split/Error-Handling.html new file mode 100644 index 00000000..1aa4d5b1 --- /dev/null +++ b/PR_0.0.21/html_split/Error-Handling.html @@ -0,0 +1,64 @@ + + + + + +Error Handling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.9 Error Handling

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘coe’]Categories of Errors‘✔️’✔️
[‘?’]errno???
[‘?’]Error Codes???
[‘eh’]Exception Handling‘✔️’✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Error-handling-Categories-of-errors.html b/PR_0.0.21/html_split/Error-handling-Categories-of-errors.html new file mode 100644 index 00000000..d617ee2a --- /dev/null +++ b/PR_0.0.21/html_split/Error-handling-Categories-of-errors.html @@ -0,0 +1,75 @@ + + + + + +Error handling Categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.3 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Error-handling-Error-codes.html b/PR_0.0.21/html_split/Error-handling-Error-codes.html new file mode 100644 index 00000000..85705112 --- /dev/null +++ b/PR_0.0.21/html_split/Error-handling-Error-codes.html @@ -0,0 +1,68 @@ + + + + + +Error handling Error codes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.2 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/External-ie-Non-Standard-Libraries.html b/PR_0.0.21/html_split/External-ie-Non-Standard-Libraries.html new file mode 100644 index 00000000..3957305d --- /dev/null +++ b/PR_0.0.21/html_split/External-ie-Non-Standard-Libraries.html @@ -0,0 +1,61 @@ + + + + + +External ie Non Standard Libraries (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.11 External (i.e., Non Standard) Libraries

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Graphical User Interfaces???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html b/PR_0.0.21/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html new file mode 100644 index 00000000..744cb38f --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Calling-static_005fassert-with-a-constant-expression.html @@ -0,0 +1,65 @@ + + + + + +Foundational Calling static_assert with a constant expression (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4 Foundational: Calling static_assert with a constant

+

expression +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Categories-of-errors.html b/PR_0.0.21/html_split/Foundational-Categories-of-errors.html new file mode 100644 index 00000000..ebe541a9 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Categories-of-errors.html @@ -0,0 +1,64 @@ + + + + + +Foundational Categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.3.4 Foundational: Categories of errors

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Declaring-variables.html b/PR_0.0.21/html_split/Foundational-Declaring-variables.html new file mode 100644 index 00000000..a8d852bc --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Declaring-variables.html @@ -0,0 +1,64 @@ + + + + + +Foundational Declaring variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.10.4 Foundational: Declaring variables

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Defining-variables-and-ODR.html b/PR_0.0.21/html_split/Foundational-Defining-variables-and-ODR.html new file mode 100644 index 00000000..3f01511a --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Defining-variables-and-ODR.html @@ -0,0 +1,64 @@ + + + + + +Foundational Defining variables and ODR (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.8.4 Foundational: Defining variables and ODR

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html b/PR_0.0.21/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html new file mode 100644 index 00000000..2e765bc7 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Handling-error-codes-with-stderror_005fcode.html @@ -0,0 +1,65 @@ + + + + + +Foundational Handling error codes with stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.2.4 Foundational: Handling error codes with

+

std::error_code +

+ +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-How-and-when-are-copies-made.html b/PR_0.0.21/html_split/Foundational-How-and-when-are-copies-made.html new file mode 100644 index 00000000..c87c1f77 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-How-and-when-are-copies-made.html @@ -0,0 +1,64 @@ + + + + + +Foundational How and when are copies made (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.9.4 Foundational: How and when are copies made

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Knowledge-about-build-systems.html b/PR_0.0.21/html_split/Foundational-Knowledge-about-build-systems.html new file mode 100644 index 00000000..85fd07b0 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Knowledge-about-build-systems.html @@ -0,0 +1,64 @@ + + + + + +Foundational Knowledge about build systems (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.7.4 Foundational: Knowledge about build systems

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Standards-exception-hierarchy.html b/PR_0.0.21/html_split/Foundational-Standards-exception-hierarchy.html new file mode 100644 index 00000000..8b3ea6a1 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Standards-exception-hierarchy.html @@ -0,0 +1,64 @@ + + + + + +Foundational Standards exception hierarchy (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.3.10 Foundational: Standards exception hierarchy

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Using-UDLs.html b/PR_0.0.21/html_split/Foundational-Using-UDLs.html new file mode 100644 index 00000000..cea7a0e3 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Using-UDLs.html @@ -0,0 +1,64 @@ + + + + + +Foundational Using UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.7.4 Foundational: Using UDLs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html b/PR_0.0.21/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html new file mode 100644 index 00000000..0b56f382 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Using-and-defining-functions-with-default-arguments.html @@ -0,0 +1,65 @@ + + + + + +Foundational Using and defining functions with default arguments (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.6.4 Foundational: Using and defining functions with default

+

arguments +

+ +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Using-reference-types-to-avoid-copies.html b/PR_0.0.21/html_split/Foundational-Using-reference-types-to-avoid-copies.html new file mode 100644 index 00000000..5ee570be --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Using-reference-types-to-avoid-copies.html @@ -0,0 +1,64 @@ + + + + + +Foundational Using reference types to avoid copies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

8.4 Foundational: Using reference types to avoid copies

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Foundational-Writing-requires_002dexpressions.html b/PR_0.0.21/html_split/Foundational-Writing-requires_002dexpressions.html new file mode 100644 index 00000000..dfe30102 --- /dev/null +++ b/PR_0.0.21/html_split/Foundational-Writing-requires_002dexpressions.html @@ -0,0 +1,63 @@ + + + + + +Foundational Writing requires-expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+ +
+

7.5.1 Foundational: Writing requires-expressions

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+
+ + + + + diff --git a/PR_0.0.21/html_split/Functions-default-argument.html b/PR_0.0.21/html_split/Functions-default-argument.html new file mode 100644 index 00000000..a6e90fd8 --- /dev/null +++ b/PR_0.0.21/html_split/Functions-default-argument.html @@ -0,0 +1,68 @@ + + + + + +Functions default argument (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Functions-user_002ddefined-literals-UDL.html b/PR_0.0.21/html_split/Functions-user_002ddefined-literals-UDL.html new file mode 100644 index 00000000..36868835 --- /dev/null +++ b/PR_0.0.21/html_split/Functions-user_002ddefined-literals-UDL.html @@ -0,0 +1,67 @@ + + + + + +Functions user-defined literals UDL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.7 Functions: user-defined literals (UDL)

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Functions.html b/PR_0.0.21/html_split/Functions.html new file mode 100644 index 00000000..1957c008 --- /dev/null +++ b/PR_0.0.21/html_split/Functions.html @@ -0,0 +1,66 @@ + + + + + +Functions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.4 Functions

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Calling Functions???
[‘?’]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[‘?’]Returning Multiple Values???
[‘?’]Overloading???
[udl]User-Defined Literals✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Generic-Programming-Templates.html b/PR_0.0.21/html_split/Generic-Programming-Templates.html new file mode 100644 index 00000000..645751cf --- /dev/null +++ b/PR_0.0.21/html_split/Generic-Programming-Templates.html @@ -0,0 +1,66 @@ + + + + + +Generic Programming Templates (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.8 Generic Programming (Templates)

+ + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Concepts???
[‘?’]SFINAE???
[‘?’]Template Metaprogramming???
[‘?’]Function Templates???
[‘?’]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Glossary.html b/PR_0.0.21/html_split/Glossary.html new file mode 100644 index 00000000..dc5d79d0 --- /dev/null +++ b/PR_0.0.21/html_split/Glossary.html @@ -0,0 +1,63 @@ + + + + + +Glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

13 Glossary

+

Some possible terms to include in the glossary: +

+
    +
  • learning objective +
  • learning outcome +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/How-To-Contribute.html b/PR_0.0.21/html_split/How-To-Contribute.html new file mode 100644 index 00000000..6c32cf6f --- /dev/null +++ b/PR_0.0.21/html_split/How-To-Contribute.html @@ -0,0 +1,94 @@ + + + + + +How To Contribute (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for +inclusion in this document, please read the information below and and +the referenced documents as appropriate. +

+

All contributions to this project must be made in accordance with the +license in section License. This teaching-guidelines +document only offers guidance on teaching C++ as it is specified in the +current version of the C++ standard. So, content should be presented +relative to the most-recently ratified version of the standard. A +detailed explanation of how to present the material for a topic is given +in: +

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to +structure a teaching topic. https://wg21.link/p2193. +
+ +

Any potential contributors should ensure that they read this document. +The following document may also be helpful in providing some general +background on the modular approach to teaching followed herein: +

+ + +

In order to prepare content, it is important to understand what learning +outcomes are, and how to prepare good ones. Some information on learning +outcomes can be found in the References section. The +following document offers a concise introduction to learning outcomes: +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Inheritance-and-Class-Hierarchies.html b/PR_0.0.21/html_split/Inheritance-and-Class-Hierarchies.html new file mode 100644 index 00000000..8eab74a3 --- /dev/null +++ b/PR_0.0.21/html_split/Inheritance-and-Class-Hierarchies.html @@ -0,0 +1,62 @@ + + + + + +Inheritance and Class Hierarchies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.6 Inheritance and Class Hierarchies

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Virtual Functions???
[‘?’]Run-Time Type Information???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/License.html b/PR_0.0.21/html_split/License.html new file mode 100644 index 00000000..5cfcecd9 --- /dev/null +++ b/PR_0.0.21/html_split/License.html @@ -0,0 +1,105 @@ + + + + + +License (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core +Guidelines.] +

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+
+
+ + + + + + diff --git a/PR_0.0.21/html_split/Main-Advanced-requirements.html b/PR_0.0.21/html_split/Main-Advanced-requirements.html new file mode 100644 index 00000000..5ebf1263 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Advanced-requirements.html @@ -0,0 +1,63 @@ + + + + + +Main Advanced requirements (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + +
+
+ +
+

7.5.2 Main: Advanced requirements

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Contracts-and-static_005fassert.html b/PR_0.0.21/html_split/Main-Contracts-and-static_005fassert.html new file mode 100644 index 00000000..59608ea9 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Contracts-and-static_005fassert.html @@ -0,0 +1,64 @@ + + + + + +Main Contracts and static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.5 Main: Contracts and static_assert

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Declarations-for-programs.html b/PR_0.0.21/html_split/Main-Declarations-for-programs.html new file mode 100644 index 00000000..5de56464 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Declarations-for-programs.html @@ -0,0 +1,64 @@ + + + + + +Main Declarations for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.10.5 Main: Declarations for programs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Defining-for-programs.html b/PR_0.0.21/html_split/Main-Defining-for-programs.html new file mode 100644 index 00000000..d8511364 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Defining-for-programs.html @@ -0,0 +1,65 @@ + + + + + +Main Defining for programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.8.5 Main: Defining for programs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Designing-APIs-around-stderror_005fcode.html b/PR_0.0.21/html_split/Main-Designing-APIs-around-stderror_005fcode.html new file mode 100644 index 00000000..f49043ba --- /dev/null +++ b/PR_0.0.21/html_split/Main-Designing-APIs-around-stderror_005fcode.html @@ -0,0 +1,64 @@ + + + + + +Main Designing APIs around stderror_code (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.2.5 Main: Designing APIs around std::error_code

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Exception-guarantees.html b/PR_0.0.21/html_split/Main-Exception-guarantees.html new file mode 100644 index 00000000..a431d474 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Exception-guarantees.html @@ -0,0 +1,65 @@ + + + + + +Main Exception guarantees (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.3.11 Main: Exception guarantees

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Handling-different-categories-of-errors.html b/PR_0.0.21/html_split/Main-Handling-different-categories-of-errors.html new file mode 100644 index 00000000..6ca287d4 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Handling-different-categories-of-errors.html @@ -0,0 +1,64 @@ + + + + + +Main Handling different categories of errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.3.5 Main: Handling different categories of errors

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Implementing-user_002ddefined-copy-operations.html b/PR_0.0.21/html_split/Main-Implementing-user_002ddefined-copy-operations.html new file mode 100644 index 00000000..3bb7f4e8 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Implementing-user_002ddefined-copy-operations.html @@ -0,0 +1,64 @@ + + + + + +Main Implementing user-defined copy operations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.9.5 Main: Implementing user-defined copy operations

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Usage-of-build-system-to-compile-a-executable.html b/PR_0.0.21/html_split/Main-Usage-of-build-system-to-compile-a-executable.html new file mode 100644 index 00000000..206505af --- /dev/null +++ b/PR_0.0.21/html_split/Main-Usage-of-build-system-to-compile-a-executable.html @@ -0,0 +1,64 @@ + + + + + +Main Usage of build system to compile a executable (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.7.5 Main: Usage of build system to compile a executable

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-Using-references-to-modify-external-data.html b/PR_0.0.21/html_split/Main-Using-references-to-modify-external-data.html new file mode 100644 index 00000000..4a81b723 --- /dev/null +++ b/PR_0.0.21/html_split/Main-Using-references-to-modify-external-data.html @@ -0,0 +1,64 @@ + + + + + +Main Using references to modify external data (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

8.5 Main: Using references to modify external data

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-implementing-UDLs.html b/PR_0.0.21/html_split/Main-implementing-UDLs.html new file mode 100644 index 00000000..16a0898a --- /dev/null +++ b/PR_0.0.21/html_split/Main-implementing-UDLs.html @@ -0,0 +1,63 @@ + + + + + +Main implementing UDLs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.7.5 Main: implementing UDLs

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Main-implementing-_002a.html b/PR_0.0.21/html_split/Main-implementing-_002a.html new file mode 100644 index 00000000..a3c994e9 --- /dev/null +++ b/PR_0.0.21/html_split/Main-implementing-_002a.html @@ -0,0 +1,64 @@ + + + + + +Main implementing * (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

7.6.5 Main: implementing *

+ + + +
+ + + + + diff --git a/PR_0.0.21/html_split/Meta_002derror-handling-static_005fassert.html b/PR_0.0.21/html_split/Meta_002derror-handling-static_005fassert.html new file mode 100644 index 00000000..88839e08 --- /dev/null +++ b/PR_0.0.21/html_split/Meta_002derror-handling-static_005fassert.html @@ -0,0 +1,67 @@ + + + + + +Meta-error handling static_assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Module-name-Build-systems.html b/PR_0.0.21/html_split/Module-name-Build-systems.html new file mode 100644 index 00000000..9076a033 --- /dev/null +++ b/PR_0.0.21/html_split/Module-name-Build-systems.html @@ -0,0 +1,68 @@ + + + + + +Module name Build systems (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+
+ +
+

9.7 Module name: Build systems

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Module-name-Passing-Parameters-by-Reference.html b/PR_0.0.21/html_split/Module-name-Passing-Parameters-by-Reference.html new file mode 100644 index 00000000..8ba79fb1 --- /dev/null +++ b/PR_0.0.21/html_split/Module-name-Passing-Parameters-by-Reference.html @@ -0,0 +1,73 @@ + + + + + +Module name Passing Parameters by Reference (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

9 Module name: Passing Parameters by Reference

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Module-name-Passing-Parameters-by-Value.html b/PR_0.0.21/html_split/Module-name-Passing-Parameters-by-Value.html new file mode 100644 index 00000000..58bf0e92 --- /dev/null +++ b/PR_0.0.21/html_split/Module-name-Passing-Parameters-by-Value.html @@ -0,0 +1,69 @@ + + + + + +Module name Passing Parameters by Value (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

8 Module name: Passing Parameters by Value

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Module-name-Requires-Expressions.html b/PR_0.0.21/html_split/Module-name-Requires-Expressions.html new file mode 100644 index 00000000..8fb8c114 --- /dev/null +++ b/PR_0.0.21/html_split/Module-name-Requires-Expressions.html @@ -0,0 +1,63 @@ + + + + + +Module name Requires Expressions (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please +don’t remove these descriptions when editing the topic. +

+ +
    +
  • Overview
  • +
  • Motivation
  • +
+
+ + + + + diff --git a/PR_0.0.21/html_split/Motivation.html b/PR_0.0.21/html_split/Motivation.html new file mode 100644 index 00000000..379d2137 --- /dev/null +++ b/PR_0.0.21/html_split/Motivation.html @@ -0,0 +1,65 @@ + + + + + +Motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

static_assert allows the developer to enforce that conditions +which can be checked during compilation will force build errors when +violated. Additionally, they are the best mechanism by which a developer +can pass useful information to other developers regarding what violation +occurred or what must be done, instead. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html b/PR_0.0.21/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html new file mode 100644 index 00000000..1d776a78 --- /dev/null +++ b/PR_0.0.21/html_split/Obtaining-This-Document-The-Most-Recent-Version-and-Alternate-Formats.html @@ -0,0 +1,83 @@ + + + + + +Obtaining This Document The Most Recent Version and Alternate Formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate

+

Formats +The most recent version of this document is available as an online HTML +document at: https://cplusplus.github.io/SG20/latest/. +

+

The version of the document that you are currently reading is available +in the following formats: +

+
    +
  1. online (HTML) format as a single large HTML document: +https://cplusplus.github.io/SG20/PR_0.0.21/html + +
  2. EPUB format: +https://cplusplus.github.io/SG20/PR_0.0.21/guidelines.epub + +
  3. online (HTML) format, split across multiple HTML documents: +https://cplusplus.github.io/SG20/PR_0.0.21/html_split/ +[Note: The support for this format needs more work (in order to +beautify and fix linking issues).] + +
+ +

Older versions of this document are also available. In general version +ver is available at +https://cplusplus.github.io/SG20/ver/html. For example, version +0.1.0 (assuming that this version exists) would be available at +https://cplusplus.github.io/SG20/0.1.0/html. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Organization-of-This-Document.html b/PR_0.0.21/html_split/Organization-of-This-Document.html new file mode 100644 index 00000000..2ff1d1af --- /dev/null +++ b/PR_0.0.21/html_split/Organization-of-This-Document.html @@ -0,0 +1,100 @@ + + + + + +Organization of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are +partitioned into modules. A module is very broad in scope and consists +of numerous topics. +

+

For each module, topics related to the module are identified. Then, for +each topic, learning outcomes are specified. In order to address a wide +variety of courses on C++, each topic is addressed at three proficiency +levels. These proficiency levels allow each topic to be covered at more +than one level of detail. This allows target audiences with different +background and learning objectives to be accommodated. The three +proficiency levels are as follows: +

+
    +
  • foundational: This level gives the learner the idea that a facility +exists, what benefits it offers, and the basic ways of using it. + +
  • main: This level shows mainstream uses and techniques. For abstraction +and organizational mechanisms it also demonstrates how to build them. +This level should also give the learner a basic (but not detailed) +understanding of how a facility might be implemented so that the learner +can have a first-order understanding of any costs involved. + +
  • advanced: This level gives information suitable for an expert. For most +topics there is an expert level of knowledge that most programmers +rarely need and techniques that require detailed understanding of +language rules or library implementation. + +
+ +

The remainder of this document is organized as follows. The various +topics are listed grouped by module. In cases where a topic might be +classified into more than one module, the topic is listed under the +module of most direct relevance. This is done in order to avoid +duplication of content. (In the case that a topic is equally relevant to +multiple modules, the decision of which to select is made by a +proverbial coin toss.) The order in which modules and topics are +presented is not meant to imply any order of coverage in a course. The +order in which items are listed is essentially arbitrary. +

+
+
+ + + + + + diff --git a/PR_0.0.21/html_split/Overview.html b/PR_0.0.21/html_split/Overview.html new file mode 100644 index 00000000..804b1d94 --- /dev/null +++ b/PR_0.0.21/html_split/Overview.html @@ -0,0 +1,66 @@ + + + + + +Overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and +improve error messages
Advanced
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Points-to-cover.html b/PR_0.0.21/html_split/Points-to-cover.html new file mode 100644 index 00000000..0875b503 --- /dev/null +++ b/PR_0.0.21/html_split/Points-to-cover.html @@ -0,0 +1,63 @@ + + + + + +Points to cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • X +
  • In addition to what is wrong, a good error message will inform the user +of how to correct it +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Preprocessor.html b/PR_0.0.21/html_split/Preprocessor.html new file mode 100644 index 00000000..88f76086 --- /dev/null +++ b/PR_0.0.21/html_split/Preprocessor.html @@ -0,0 +1,63 @@ + + + + + +Preprocessor (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.2 Preprocessor

+ + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Preprocessor Metaprogramming???
[‘?’]Inclusion???
[‘?’]Macros???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/References-on-Learning-Outcomes.html b/PR_0.0.21/html_split/References-on-Learning-Outcomes.html new file mode 100644 index 00000000..5d840829 --- /dev/null +++ b/PR_0.0.21/html_split/References-on-Learning-Outcomes.html @@ -0,0 +1,75 @@ + + + + + +References on Learning Outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

14.1 References on Learning Outcomes

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/References.html b/PR_0.0.21/html_split/References.html new file mode 100644 index 00000000..36fff4d9 --- /dev/null +++ b/PR_0.0.21/html_split/References.html @@ -0,0 +1,61 @@ + + + + + +References (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PR_0.0.21/html_split/Software-Design.html b/PR_0.0.21/html_split/Software-Design.html new file mode 100644 index 00000000..12438909 --- /dev/null +++ b/PR_0.0.21/html_split/Software-Design.html @@ -0,0 +1,60 @@ + + + + + +Software Design (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + +
+ +
+

6.15 Software Design

+ + + +
IDUnitFoundationalMainAdvanced
[‘?’]Design by Contract???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Standard-Library.html b/PR_0.0.21/html_split/Standard-Library.html new file mode 100644 index 00000000..fa758d0f --- /dev/null +++ b/PR_0.0.21/html_split/Standard-Library.html @@ -0,0 +1,62 @@ + + + + + +Standard Library (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.10 Standard Library

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Input/Output (I/O)???
[‘?’]Containers, Iterators, and Algorithms???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Student-outcomes.html b/PR_0.0.21/html_split/Student-outcomes.html new file mode 100644 index 00000000..e734245d --- /dev/null +++ b/PR_0.0.21/html_split/Student-outcomes.html @@ -0,0 +1,66 @@ + + + + + +Student outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Assert the expected size of a structure using static_assert +
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Summary-of-Modules-and-Topics.html b/PR_0.0.21/html_split/Summary-of-Modules-and-Topics.html new file mode 100644 index 00000000..1fc0b8ad --- /dev/null +++ b/PR_0.0.21/html_split/Summary-of-Modules-and-Topics.html @@ -0,0 +1,85 @@ + + + + + +Summary of Modules and Topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are +presented. There is one section per module. For each module, a table +listing the various topics in that module is provided. The ID for a +topic is linked to the detailed coverage of that topic that comes later +in the document. If a topic has any learning outcomes at a given +proficiency level, this is indicated by a checkmark (“✔️”). If a topic +has no learning outcomes (simply because there are not any, not because +the information is missing), this is indicated by an em dash (“—”). +In the case that the information for a topic is completely missing, a +question mark (“?”) symbol is used. +

+ + +
+ + + + + diff --git a/PR_0.0.21/html_split/Testing-and-Debugging.html b/PR_0.0.21/html_split/Testing-and-Debugging.html new file mode 100644 index 00000000..be4410f4 --- /dev/null +++ b/PR_0.0.21/html_split/Testing-and-Debugging.html @@ -0,0 +1,64 @@ + + + + + +Testing and Debugging (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+
+

+Next: , Previous: , Up: Summary of Modules and Topics   [Contents]

+
+
+

6.13 Testing and Debugging

+ + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Source-Level Debuggers???
[‘?’]Code Sanitizers???
[‘?’]Test Frameworks???
[‘?’]Debugging Strategies???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Tooling.html b/PR_0.0.21/html_split/Tooling.html new file mode 100644 index 00000000..561dbc74 --- /dev/null +++ b/PR_0.0.21/html_split/Tooling.html @@ -0,0 +1,62 @@ + + + + + +Tooling (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.14 Tooling

+ + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Compiler Toolchains???
[‘?’]IDEs???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Topic-introduction.html b/PR_0.0.21/html_split/Topic-introduction.html new file mode 100644 index 00000000..05bdbfdb --- /dev/null +++ b/PR_0.0.21/html_split/Topic-introduction.html @@ -0,0 +1,62 @@ + + + + + +Topic introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

7.1.3 Topic introduction

+

Very brief introduction to the topic. +

+

static_assert is a compile-time evaluated function that asserts +the truth of a supplied predicate, issuing an optional user-supplied +error message if the predicate is false. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/Use-of-This-Document.html b/PR_0.0.21/html_split/Use-of-This-Document.html new file mode 100644 index 00000000..984129cf --- /dev/null +++ b/PR_0.0.21/html_split/Use-of-This-Document.html @@ -0,0 +1,63 @@ + + + + + +Use of This Document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ +Core Guidelines. The LICENSE document is taken verbatim from the C++ +Core Guidelines.] This document is made available under a MIT-style +license. In simple terms, this license permits copying, use, +modification, and creation of derivative works. A copy of the license is +included in the section LICENSE. +

+
+ + + + + diff --git a/PR_0.0.21/html_split/User_002dDefined-Types-Classes.html b/PR_0.0.21/html_split/User_002dDefined-Types-Classes.html new file mode 100644 index 00000000..f749c966 --- /dev/null +++ b/PR_0.0.21/html_split/User_002dDefined-Types-Classes.html @@ -0,0 +1,74 @@ + + + + + +User-Defined Types Classes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + +
+ +
+

6.5 User-Defined Types (Classes)

+ + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[‘?’]Special Member Functions???
[‘?’]Types???
[‘?’]Conversions???
[‘?’]Constructors and Destructors???
[‘?’]Move/Copy Constructors and Assignment Operators???
[‘?’]Member Functions???
[‘?’]Sum Types???
[‘?’]User-Defined Literals???
[‘?’]Special Member Functions???
[‘?’]Guidelines for Special Member Functions (e.g., Rule of Five, Rule +of Zero)???
[copy]Copy Semantics✔️✔️
[‘?’]Moving and Copying???
[‘?’]Lambdas???
+ +
+ + + + + diff --git a/PR_0.0.21/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html b/PR_0.0.21/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html new file mode 100644 index 00000000..bd320ee0 --- /dev/null +++ b/PR_0.0.21/html_split/Working-Group-Documents-Related-to-C_002b_002b-Teaching-Guidelines.html @@ -0,0 +1,74 @@ + + + + + +Working Group Documents Related to C++ Teaching Guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PR_0.0.21/html_split/_0023B.html b/PR_0.0.21/html_split/_0023B.html new file mode 100644 index 00000000..9d91e2b4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023B.html @@ -0,0 +1,42 @@ + + + + + + +#B (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #B.

+ diff --git a/PR_0.0.21/html_split/_0023BLD.html b/PR_0.0.21/html_split/_0023BLD.html new file mode 100644 index 00000000..d3ebe521 --- /dev/null +++ b/PR_0.0.21/html_split/_0023BLD.html @@ -0,0 +1,42 @@ + + + + + + +#BLD (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #BLD.

+ diff --git a/PR_0.0.21/html_split/_0023C.html b/PR_0.0.21/html_split/_0023C.html new file mode 100644 index 00000000..df37c629 --- /dev/null +++ b/PR_0.0.21/html_split/_0023C.html @@ -0,0 +1,42 @@ + + + + + + +#C (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #C.

+ diff --git a/PR_0.0.21/html_split/_0023CM.html b/PR_0.0.21/html_split/_0023CM.html new file mode 100644 index 00000000..1699ba77 --- /dev/null +++ b/PR_0.0.21/html_split/_0023CM.html @@ -0,0 +1,42 @@ + + + + + + +#CM (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #CM.

+ diff --git a/PR_0.0.21/html_split/_0023CT.html b/PR_0.0.21/html_split/_0023CT.html new file mode 100644 index 00000000..6312967f --- /dev/null +++ b/PR_0.0.21/html_split/_0023CT.html @@ -0,0 +1,42 @@ + + + + + + +#CT (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #CT.

+ diff --git a/PR_0.0.21/html_split/_0023EH.html b/PR_0.0.21/html_split/_0023EH.html new file mode 100644 index 00000000..3c676996 --- /dev/null +++ b/PR_0.0.21/html_split/_0023EH.html @@ -0,0 +1,42 @@ + + + + + + +#EH (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #EH.

+ diff --git a/PR_0.0.21/html_split/_0023EL.html b/PR_0.0.21/html_split/_0023EL.html new file mode 100644 index 00000000..45f6d36a --- /dev/null +++ b/PR_0.0.21/html_split/_0023EL.html @@ -0,0 +1,42 @@ + + + + + + +#EL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #EL.

+ diff --git a/PR_0.0.21/html_split/_0023F.html b/PR_0.0.21/html_split/_0023F.html new file mode 100644 index 00000000..7cf4dfee --- /dev/null +++ b/PR_0.0.21/html_split/_0023F.html @@ -0,0 +1,42 @@ + + + + + + +#F (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #F.

+ diff --git a/PR_0.0.21/html_split/_0023I.html b/PR_0.0.21/html_split/_0023I.html new file mode 100644 index 00000000..d912afde --- /dev/null +++ b/PR_0.0.21/html_split/_0023I.html @@ -0,0 +1,42 @@ + + + + + + +#I (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #I.

+ diff --git a/PR_0.0.21/html_split/_0023P.html b/PR_0.0.21/html_split/_0023P.html new file mode 100644 index 00000000..bd2bf309 --- /dev/null +++ b/PR_0.0.21/html_split/_0023P.html @@ -0,0 +1,42 @@ + + + + + + +#P (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #P.

+ diff --git a/PR_0.0.21/html_split/_0023SD.html b/PR_0.0.21/html_split/_0023SD.html new file mode 100644 index 00000000..13a000eb --- /dev/null +++ b/PR_0.0.21/html_split/_0023SD.html @@ -0,0 +1,42 @@ + + + + + + +#SD (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #SD.

+ diff --git a/PR_0.0.21/html_split/_0023SL.html b/PR_0.0.21/html_split/_0023SL.html new file mode 100644 index 00000000..b198dd0c --- /dev/null +++ b/PR_0.0.21/html_split/_0023SL.html @@ -0,0 +1,42 @@ + + + + + + +#SL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #SL.

+ diff --git a/PR_0.0.21/html_split/_0023T.html b/PR_0.0.21/html_split/_0023T.html new file mode 100644 index 00000000..013fe871 --- /dev/null +++ b/PR_0.0.21/html_split/_0023T.html @@ -0,0 +1,42 @@ + + + + + + +#T (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #T.

+ diff --git a/PR_0.0.21/html_split/_0023TD.html b/PR_0.0.21/html_split/_0023TD.html new file mode 100644 index 00000000..a11d3257 --- /dev/null +++ b/PR_0.0.21/html_split/_0023TD.html @@ -0,0 +1,42 @@ + + + + + + +#TD (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #TD.

+ diff --git a/PR_0.0.21/html_split/_0023TOOL.html b/PR_0.0.21/html_split/_0023TOOL.html new file mode 100644 index 00000000..39d1c10b --- /dev/null +++ b/PR_0.0.21/html_split/_0023TOOL.html @@ -0,0 +1,42 @@ + + + + + + +#TOOL (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #TOOL.

+ diff --git a/PR_0.0.21/html_split/_0023advanced.html b/PR_0.0.21/html_split/_0023advanced.html new file mode 100644 index 00000000..c310a189 --- /dev/null +++ b/PR_0.0.21/html_split/_0023advanced.html @@ -0,0 +1,42 @@ + + + + + + +#advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced.

+ diff --git a/PR_0.0.21/html_split/_0023advanced_002d1.html b/PR_0.0.21/html_split/_0023advanced_002d1.html new file mode 100644 index 00000000..a6e0009f --- /dev/null +++ b/PR_0.0.21/html_split/_0023advanced_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-1.

+ diff --git a/PR_0.0.21/html_split/_0023advanced_002d2.html b/PR_0.0.21/html_split/_0023advanced_002d2.html new file mode 100644 index 00000000..5bbde172 --- /dev/null +++ b/PR_0.0.21/html_split/_0023advanced_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-2.

+ diff --git a/PR_0.0.21/html_split/_0023advanced_002d3.html b/PR_0.0.21/html_split/_0023advanced_002d3.html new file mode 100644 index 00000000..33c81f87 --- /dev/null +++ b/PR_0.0.21/html_split/_0023advanced_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-3.

+ diff --git a/PR_0.0.21/html_split/_0023advanced_002d4.html b/PR_0.0.21/html_split/_0023advanced_002d4.html new file mode 100644 index 00000000..9e4b6303 --- /dev/null +++ b/PR_0.0.21/html_split/_0023advanced_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#advanced-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #advanced-4.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge.html new file mode 100644 index 00000000..8ea66f8e --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d1.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d1.html new file mode 100644 index 00000000..c6d7d691 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-1.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d10.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d10.html new file mode 100644 index 00000000..2d0e7814 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-10.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d11.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d11.html new file mode 100644 index 00000000..1e14b040 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-11.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d12.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d12.html new file mode 100644 index 00000000..fde383ec --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-12.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d13.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d13.html new file mode 100644 index 00000000..5779c1e7 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-13.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d14.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d14.html new file mode 100644 index 00000000..d6ff9f4d --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-14.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d15.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d15.html new file mode 100644 index 00000000..442cda67 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-15.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d16.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d16.html new file mode 100644 index 00000000..41bc3097 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-16.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d17.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d17.html new file mode 100644 index 00000000..6aaaf643 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-17.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d18.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d18.html new file mode 100644 index 00000000..f07d2684 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-18.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d19.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d19.html new file mode 100644 index 00000000..3ec5e5cb --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-19.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d2.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d2.html new file mode 100644 index 00000000..5f97abe0 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-2.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d20.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d20.html new file mode 100644 index 00000000..f78da9fc --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-20.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d21.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d21.html new file mode 100644 index 00000000..93305617 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-21.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d22.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d22.html new file mode 100644 index 00000000..facaa97e --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-22.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d23.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d23.html new file mode 100644 index 00000000..f54e6361 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-23.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d24.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d24.html new file mode 100644 index 00000000..d54b590a --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d24.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-24 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-24.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d25.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d25.html new file mode 100644 index 00000000..691b6cc4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d25.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-25 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-25.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d3.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d3.html new file mode 100644 index 00000000..d91914d6 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-3.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d4.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d4.html new file mode 100644 index 00000000..534eac43 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-4.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d5.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d5.html new file mode 100644 index 00000000..ac39ea80 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-5.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d6.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d6.html new file mode 100644 index 00000000..1c2c9833 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-6.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d7.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d7.html new file mode 100644 index 00000000..0078fb60 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-7.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d8.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d8.html new file mode 100644 index 00000000..ad7fd991 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-8.

+ diff --git a/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d9.html b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d9.html new file mode 100644 index 00000000..84373f83 --- /dev/null +++ b/PR_0.0.21/html_split/_0023backgroundrequired_002dknowledge_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#backgroundrequired-knowledge-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #backgroundrequired-knowledge-9.

+ diff --git a/PR_0.0.21/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html b/PR_0.0.21/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html new file mode 100644 index 00000000..d0ebbb98 --- /dev/null +++ b/PR_0.0.21/html_split/_0023c_002dobject_002dmodel_002ddeclarations.html @@ -0,0 +1,42 @@ + + + + + + +#c-object-model-declarations (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #c-object-model-declarations.

+ diff --git a/PR_0.0.21/html_split/_0023caveats.html b/PR_0.0.21/html_split/_0023caveats.html new file mode 100644 index 00000000..958b2344 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats.html @@ -0,0 +1,42 @@ + + + + + + +#caveats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d1.html b/PR_0.0.21/html_split/_0023caveats_002d1.html new file mode 100644 index 00000000..cea1d772 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-1.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d10.html b/PR_0.0.21/html_split/_0023caveats_002d10.html new file mode 100644 index 00000000..3a6cb56b --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-10.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d11.html b/PR_0.0.21/html_split/_0023caveats_002d11.html new file mode 100644 index 00000000..08177ced --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-11.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d12.html b/PR_0.0.21/html_split/_0023caveats_002d12.html new file mode 100644 index 00000000..2ad12458 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-12.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d13.html b/PR_0.0.21/html_split/_0023caveats_002d13.html new file mode 100644 index 00000000..44240cc1 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-13.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d14.html b/PR_0.0.21/html_split/_0023caveats_002d14.html new file mode 100644 index 00000000..ac79de84 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-14.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d15.html b/PR_0.0.21/html_split/_0023caveats_002d15.html new file mode 100644 index 00000000..7975a463 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-15.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d16.html b/PR_0.0.21/html_split/_0023caveats_002d16.html new file mode 100644 index 00000000..fa0fc542 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-16.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d17.html b/PR_0.0.21/html_split/_0023caveats_002d17.html new file mode 100644 index 00000000..4772dcad --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-17.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d18.html b/PR_0.0.21/html_split/_0023caveats_002d18.html new file mode 100644 index 00000000..14c39ea5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-18.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d19.html b/PR_0.0.21/html_split/_0023caveats_002d19.html new file mode 100644 index 00000000..28b6166b --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-19.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d2.html b/PR_0.0.21/html_split/_0023caveats_002d2.html new file mode 100644 index 00000000..5a96c75d --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-2.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d20.html b/PR_0.0.21/html_split/_0023caveats_002d20.html new file mode 100644 index 00000000..a0b737a2 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-20.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d21.html b/PR_0.0.21/html_split/_0023caveats_002d21.html new file mode 100644 index 00000000..fabcf642 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-21.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d22.html b/PR_0.0.21/html_split/_0023caveats_002d22.html new file mode 100644 index 00000000..d7f6d005 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-22.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d23.html b/PR_0.0.21/html_split/_0023caveats_002d23.html new file mode 100644 index 00000000..9ba3f280 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-23.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d24.html b/PR_0.0.21/html_split/_0023caveats_002d24.html new file mode 100644 index 00000000..19e34de3 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d24.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-24 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-24.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d25.html b/PR_0.0.21/html_split/_0023caveats_002d25.html new file mode 100644 index 00000000..41dc89df --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d25.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-25 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-25.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d3.html b/PR_0.0.21/html_split/_0023caveats_002d3.html new file mode 100644 index 00000000..38544fd3 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-3.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d4.html b/PR_0.0.21/html_split/_0023caveats_002d4.html new file mode 100644 index 00000000..9a0d75ac --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-4.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d5.html b/PR_0.0.21/html_split/_0023caveats_002d5.html new file mode 100644 index 00000000..e69246d5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-5.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d6.html b/PR_0.0.21/html_split/_0023caveats_002d6.html new file mode 100644 index 00000000..eecca657 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-6.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d7.html b/PR_0.0.21/html_split/_0023caveats_002d7.html new file mode 100644 index 00000000..3a3fa1c0 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-7.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d8.html b/PR_0.0.21/html_split/_0023caveats_002d8.html new file mode 100644 index 00000000..885f1a14 --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-8.

+ diff --git a/PR_0.0.21/html_split/_0023caveats_002d9.html b/PR_0.0.21/html_split/_0023caveats_002d9.html new file mode 100644 index 00000000..7a9cd86f --- /dev/null +++ b/PR_0.0.21/html_split/_0023caveats_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#caveats-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #caveats-9.

+ diff --git a/PR_0.0.21/html_split/_0023coe_002dadvanced.html b/PR_0.0.21/html_split/_0023coe_002dadvanced.html new file mode 100644 index 00000000..440aa9a4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023coe_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#coe-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #coe-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023coe_002dfound.html b/PR_0.0.21/html_split/_0023coe_002dfound.html new file mode 100644 index 00000000..d721496c --- /dev/null +++ b/PR_0.0.21/html_split/_0023coe_002dfound.html @@ -0,0 +1,42 @@ + + + + + + +#coe-found (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #coe-found.

+ diff --git a/PR_0.0.21/html_split/_0023coe_002dmain.html b/PR_0.0.21/html_split/_0023coe_002dmain.html new file mode 100644 index 00000000..c3e6698a --- /dev/null +++ b/PR_0.0.21/html_split/_0023coe_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#coe-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #coe-main.

+ diff --git a/PR_0.0.21/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html b/PR_0.0.21/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html new file mode 100644 index 00000000..ebf42805 --- /dev/null +++ b/PR_0.0.21/html_split/_0023context_002dand_002daim_002dof_002dthis_002dguide.html @@ -0,0 +1,42 @@ + + + + + + +#context-and-aim-of-this-guide (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #context-and-aim-of-this-guide.

+ diff --git a/PR_0.0.21/html_split/_0023contributing.html b/PR_0.0.21/html_split/_0023contributing.html new file mode 100644 index 00000000..1802b162 --- /dev/null +++ b/PR_0.0.21/html_split/_0023contributing.html @@ -0,0 +1,42 @@ + + + + + + +#contributing (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #contributing.

+ diff --git a/PR_0.0.21/html_split/_0023contributing_002dto_002dthis_002ddocument.html b/PR_0.0.21/html_split/_0023contributing_002dto_002dthis_002ddocument.html new file mode 100644 index 00000000..ac4096b6 --- /dev/null +++ b/PR_0.0.21/html_split/_0023contributing_002dto_002dthis_002ddocument.html @@ -0,0 +1,42 @@ + + + + + + +#contributing-to-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #contributing-to-this-document.

+ diff --git a/PR_0.0.21/html_split/_0023contributors.html b/PR_0.0.21/html_split/_0023contributors.html new file mode 100644 index 00000000..80517a53 --- /dev/null +++ b/PR_0.0.21/html_split/_0023contributors.html @@ -0,0 +1,42 @@ + + + + + + +#contributors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #contributors.

+ diff --git a/PR_0.0.21/html_split/_0023copy.html b/PR_0.0.21/html_split/_0023copy.html new file mode 100644 index 00000000..721eff54 --- /dev/null +++ b/PR_0.0.21/html_split/_0023copy.html @@ -0,0 +1,42 @@ + + + + + + +#copy (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy.

+ diff --git a/PR_0.0.21/html_split/_0023copy_002dadvanced.html b/PR_0.0.21/html_split/_0023copy_002dadvanced.html new file mode 100644 index 00000000..d3f9d3fc --- /dev/null +++ b/PR_0.0.21/html_split/_0023copy_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#copy-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023copy_002dbasic.html b/PR_0.0.21/html_split/_0023copy_002dbasic.html new file mode 100644 index 00000000..a0e471e6 --- /dev/null +++ b/PR_0.0.21/html_split/_0023copy_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#copy-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy-basic.

+ diff --git a/PR_0.0.21/html_split/_0023copy_002dmain.html b/PR_0.0.21/html_split/_0023copy_002dmain.html new file mode 100644 index 00000000..d73f6f81 --- /dev/null +++ b/PR_0.0.21/html_split/_0023copy_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#copy-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #copy-main.

+ diff --git a/PR_0.0.21/html_split/_0023def.html b/PR_0.0.21/html_split/_0023def.html new file mode 100644 index 00000000..898c843d --- /dev/null +++ b/PR_0.0.21/html_split/_0023def.html @@ -0,0 +1,42 @@ + + + + + + +#def (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def.

+ diff --git a/PR_0.0.21/html_split/_0023def_002dadvanced.html b/PR_0.0.21/html_split/_0023def_002dadvanced.html new file mode 100644 index 00000000..67de68ba --- /dev/null +++ b/PR_0.0.21/html_split/_0023def_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#def-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023def_002dfound.html b/PR_0.0.21/html_split/_0023def_002dfound.html new file mode 100644 index 00000000..eec7dda0 --- /dev/null +++ b/PR_0.0.21/html_split/_0023def_002dfound.html @@ -0,0 +1,42 @@ + + + + + + +#def-found (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def-found.

+ diff --git a/PR_0.0.21/html_split/_0023def_002dmain.html b/PR_0.0.21/html_split/_0023def_002dmain.html new file mode 100644 index 00000000..bf5b3905 --- /dev/null +++ b/PR_0.0.21/html_split/_0023def_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#def-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #def-main.

+ diff --git a/PR_0.0.21/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html b/PR_0.0.21/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..f1de373c --- /dev/null +++ b/PR_0.0.21/html_split/_0023detailed_002dinformation_002dfor_002dmodules_002dand_002dtopics.html @@ -0,0 +1,42 @@ + + + + + + +#detailed-information-for-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #detailed-information-for-modules-and-topics.

+ diff --git a/PR_0.0.21/html_split/_0023ecodes.html b/PR_0.0.21/html_split/_0023ecodes.html new file mode 100644 index 00000000..d5f80282 --- /dev/null +++ b/PR_0.0.21/html_split/_0023ecodes.html @@ -0,0 +1,42 @@ + + + + + + +#ecodes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #ecodes.

+ diff --git a/PR_0.0.21/html_split/_0023eh_002dadvanced.html b/PR_0.0.21/html_split/_0023eh_002dadvanced.html new file mode 100644 index 00000000..6b433b77 --- /dev/null +++ b/PR_0.0.21/html_split/_0023eh_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#eh-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #eh-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023eh_002dfound.html b/PR_0.0.21/html_split/_0023eh_002dfound.html new file mode 100644 index 00000000..2d7f747d --- /dev/null +++ b/PR_0.0.21/html_split/_0023eh_002dfound.html @@ -0,0 +1,42 @@ + + + + + + +#eh-found (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #eh-found.

+ diff --git a/PR_0.0.21/html_split/_0023eh_002dmain.html b/PR_0.0.21/html_split/_0023eh_002dmain.html new file mode 100644 index 00000000..e624cc11 --- /dev/null +++ b/PR_0.0.21/html_split/_0023eh_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#eh-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #eh-main.

+ diff --git a/PR_0.0.21/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html b/PR_0.0.21/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html new file mode 100644 index 00000000..02eb66cb --- /dev/null +++ b/PR_0.0.21/html_split/_0023error_002dhandling_002dcategories_002dof_002derrors.html @@ -0,0 +1,42 @@ + + + + + + +#error-handling-categories-of-errors (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #error-handling-categories-of-errors.

+ diff --git a/PR_0.0.21/html_split/_0023foundational_002ddeclaring_002dvariables.html b/PR_0.0.21/html_split/_0023foundational_002ddeclaring_002dvariables.html new file mode 100644 index 00000000..1599f45c --- /dev/null +++ b/PR_0.0.21/html_split/_0023foundational_002ddeclaring_002dvariables.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-declaring-variables (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-declaring-variables.

+ diff --git a/PR_0.0.21/html_split/_0023foundational_002dknowledge_002dabout_002dbuild_002dsystems.html b/PR_0.0.21/html_split/_0023foundational_002dknowledge_002dabout_002dbuild_002dsystems.html new file mode 100644 index 00000000..bf1416fb --- /dev/null +++ b/PR_0.0.21/html_split/_0023foundational_002dknowledge_002dabout_002dbuild_002dsystems.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-knowledge-about-build-systems (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-knowledge-about-build-systems.

+ diff --git a/PR_0.0.21/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies.html b/PR_0.0.21/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies.html new file mode 100644 index 00000000..6e15d360 --- /dev/null +++ b/PR_0.0.21/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-using-reference-types-to-avoid-copies (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-reference-types-to-avoid-copies.

+ diff --git a/PR_0.0.21/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies_002d1.html b/PR_0.0.21/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies_002d1.html new file mode 100644 index 00000000..9669e6e3 --- /dev/null +++ b/PR_0.0.21/html_split/_0023foundational_002dusing_002dreference_002dtypes_002dto_002davoid_002dcopies_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#foundational-using-reference-types-to-avoid-copies-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #foundational-using-reference-types-to-avoid-copies-1.

+ diff --git a/PR_0.0.21/html_split/_0023func_002dargs.html b/PR_0.0.21/html_split/_0023func_002dargs.html new file mode 100644 index 00000000..5f58a9e9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023func_002dargs.html @@ -0,0 +1,42 @@ + + + + + + +#func-args (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args.

+ diff --git a/PR_0.0.21/html_split/_0023func_002dargs_002dadvanced.html b/PR_0.0.21/html_split/_0023func_002dargs_002dadvanced.html new file mode 100644 index 00000000..eeb8c262 --- /dev/null +++ b/PR_0.0.21/html_split/_0023func_002dargs_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#func-args-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023func_002dargs_002dbasic.html b/PR_0.0.21/html_split/_0023func_002dargs_002dbasic.html new file mode 100644 index 00000000..bb7b70a7 --- /dev/null +++ b/PR_0.0.21/html_split/_0023func_002dargs_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#func-args-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args-basic.

+ diff --git a/PR_0.0.21/html_split/_0023func_002dargs_002dmain.html b/PR_0.0.21/html_split/_0023func_002dargs_002dmain.html new file mode 100644 index 00000000..7879cd10 --- /dev/null +++ b/PR_0.0.21/html_split/_0023func_002dargs_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#func-args-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #func-args-main.

+ diff --git a/PR_0.0.21/html_split/_0023glossary.html b/PR_0.0.21/html_split/_0023glossary.html new file mode 100644 index 00000000..18f2735c --- /dev/null +++ b/PR_0.0.21/html_split/_0023glossary.html @@ -0,0 +1,42 @@ + + + + + + +#glossary (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #glossary.

+ diff --git a/PR_0.0.21/html_split/_0023license.html b/PR_0.0.21/html_split/_0023license.html new file mode 100644 index 00000000..342cc9c4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023license.html @@ -0,0 +1,42 @@ + + + + + + +#license (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #license.

+ diff --git a/PR_0.0.21/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html b/PR_0.0.21/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html new file mode 100644 index 00000000..aca7d4b0 --- /dev/null +++ b/PR_0.0.21/html_split/_0023main_002ddeclarations_002dfor_002dprograms.html @@ -0,0 +1,42 @@ + + + + + + +#main-declarations-for-programs (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-declarations-for-programs.

+ diff --git a/PR_0.0.21/html_split/_0023main_002dusage_002dof_002dbuild_002dsystem_002dto_002dcompile_002da_002dexecutable.html b/PR_0.0.21/html_split/_0023main_002dusage_002dof_002dbuild_002dsystem_002dto_002dcompile_002da_002dexecutable.html new file mode 100644 index 00000000..2b2e229a --- /dev/null +++ b/PR_0.0.21/html_split/_0023main_002dusage_002dof_002dbuild_002dsystem_002dto_002dcompile_002da_002dexecutable.html @@ -0,0 +1,42 @@ + + + + + + +#main-usage-of-build-system-to-compile-a-executable (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-usage-of-build-system-to-compile-a-executable.

+ diff --git a/PR_0.0.21/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata.html b/PR_0.0.21/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata.html new file mode 100644 index 00000000..6c16cd16 --- /dev/null +++ b/PR_0.0.21/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata.html @@ -0,0 +1,42 @@ + + + + + + +#main-using-references-to-modify-external-data (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-using-references-to-modify-external-data.

+ diff --git a/PR_0.0.21/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata_002d1.html b/PR_0.0.21/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata_002d1.html new file mode 100644 index 00000000..c4a9f421 --- /dev/null +++ b/PR_0.0.21/html_split/_0023main_002dusing_002dreferences_002dto_002dmodify_002dexternal_002ddata_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#main-using-references-to-modify-external-data-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #main-using-references-to-modify-external-data-1.

+ diff --git a/PR_0.0.21/html_split/_0023module_002dname_002dbuild_002dsystems.html b/PR_0.0.21/html_split/_0023module_002dname_002dbuild_002dsystems.html new file mode 100644 index 00000000..b39e3096 --- /dev/null +++ b/PR_0.0.21/html_split/_0023module_002dname_002dbuild_002dsystems.html @@ -0,0 +1,42 @@ + + + + + + +#module-name-build-systems (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-build-systems.

+ diff --git a/PR_0.0.21/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dreference.html b/PR_0.0.21/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dreference.html new file mode 100644 index 00000000..26eb13ef --- /dev/null +++ b/PR_0.0.21/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dreference.html @@ -0,0 +1,42 @@ + + + + + + +#module-name-passing-parameters-by-reference (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-passing-parameters-by-reference.

+ diff --git a/PR_0.0.21/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dvalue.html b/PR_0.0.21/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dvalue.html new file mode 100644 index 00000000..80ac6e27 --- /dev/null +++ b/PR_0.0.21/html_split/_0023module_002dname_002dpassing_002dparameters_002dby_002dvalue.html @@ -0,0 +1,42 @@ + + + + + + +#module-name-passing-parameters-by-value (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #module-name-passing-parameters-by-value.

+ diff --git a/PR_0.0.21/html_split/_0023motivation.html b/PR_0.0.21/html_split/_0023motivation.html new file mode 100644 index 00000000..768bddf1 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation.html @@ -0,0 +1,42 @@ + + + + + + +#motivation (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d1.html b/PR_0.0.21/html_split/_0023motivation_002d1.html new file mode 100644 index 00000000..79e52d8b --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-1.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d10.html b/PR_0.0.21/html_split/_0023motivation_002d10.html new file mode 100644 index 00000000..f521dbae --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-10.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d11.html b/PR_0.0.21/html_split/_0023motivation_002d11.html new file mode 100644 index 00000000..dd42fae2 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-11.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d12.html b/PR_0.0.21/html_split/_0023motivation_002d12.html new file mode 100644 index 00000000..215f49f2 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-12.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d2.html b/PR_0.0.21/html_split/_0023motivation_002d2.html new file mode 100644 index 00000000..b587a3b0 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-2.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d3.html b/PR_0.0.21/html_split/_0023motivation_002d3.html new file mode 100644 index 00000000..e4fdbeaf --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-3.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d4.html b/PR_0.0.21/html_split/_0023motivation_002d4.html new file mode 100644 index 00000000..0f5663b6 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-4.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d5.html b/PR_0.0.21/html_split/_0023motivation_002d5.html new file mode 100644 index 00000000..f35c1896 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-5.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d6.html b/PR_0.0.21/html_split/_0023motivation_002d6.html new file mode 100644 index 00000000..7970b3f9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-6.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d7.html b/PR_0.0.21/html_split/_0023motivation_002d7.html new file mode 100644 index 00000000..3edee585 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-7.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d8.html b/PR_0.0.21/html_split/_0023motivation_002d8.html new file mode 100644 index 00000000..7218bda3 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-8.

+ diff --git a/PR_0.0.21/html_split/_0023motivation_002d9.html b/PR_0.0.21/html_split/_0023motivation_002d9.html new file mode 100644 index 00000000..3c51ffc5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023motivation_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#motivation-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #motivation-9.

+ diff --git a/PR_0.0.21/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html b/PR_0.0.21/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html new file mode 100644 index 00000000..6a93df88 --- /dev/null +++ b/PR_0.0.21/html_split/_0023obtaining_002dthis_002ddocument_002dthe_002dmost_002drecent_002dversion_002dand_002dalternate_002dformats.html @@ -0,0 +1,42 @@ + + + + + + +#obtaining-this-document-the-most-recent-version-and-alternate-formats (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #obtaining-this-document-the-most-recent-version-and-alternate-formats.

+ diff --git a/PR_0.0.21/html_split/_0023organization_002dof_002dthis_002ddocument.html b/PR_0.0.21/html_split/_0023organization_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..37b335b3 --- /dev/null +++ b/PR_0.0.21/html_split/_0023organization_002dof_002dthis_002ddocument.html @@ -0,0 +1,42 @@ + + + + + + +#organization-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #organization-of-this-document.

+ diff --git a/PR_0.0.21/html_split/_0023overview.html b/PR_0.0.21/html_split/_0023overview.html new file mode 100644 index 00000000..dec3ed6c --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview.html @@ -0,0 +1,42 @@ + + + + + + +#overview (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d1.html b/PR_0.0.21/html_split/_0023overview_002d1.html new file mode 100644 index 00000000..2252d07b --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#overview-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-1.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d10.html b/PR_0.0.21/html_split/_0023overview_002d10.html new file mode 100644 index 00000000..4932ea97 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#overview-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-10.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d11.html b/PR_0.0.21/html_split/_0023overview_002d11.html new file mode 100644 index 00000000..e46c65b5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#overview-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-11.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d12.html b/PR_0.0.21/html_split/_0023overview_002d12.html new file mode 100644 index 00000000..d2f2d4da --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#overview-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-12.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d2.html b/PR_0.0.21/html_split/_0023overview_002d2.html new file mode 100644 index 00000000..18e84557 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#overview-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-2.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d3.html b/PR_0.0.21/html_split/_0023overview_002d3.html new file mode 100644 index 00000000..5c2e1604 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#overview-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-3.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d4.html b/PR_0.0.21/html_split/_0023overview_002d4.html new file mode 100644 index 00000000..0da26646 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#overview-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-4.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d5.html b/PR_0.0.21/html_split/_0023overview_002d5.html new file mode 100644 index 00000000..161a7aa2 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#overview-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-5.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d6.html b/PR_0.0.21/html_split/_0023overview_002d6.html new file mode 100644 index 00000000..aca60580 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#overview-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-6.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d7.html b/PR_0.0.21/html_split/_0023overview_002d7.html new file mode 100644 index 00000000..df40b639 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#overview-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-7.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d8.html b/PR_0.0.21/html_split/_0023overview_002d8.html new file mode 100644 index 00000000..3fa08b3c --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#overview-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-8.

+ diff --git a/PR_0.0.21/html_split/_0023overview_002d9.html b/PR_0.0.21/html_split/_0023overview_002d9.html new file mode 100644 index 00000000..7ef5c763 --- /dev/null +++ b/PR_0.0.21/html_split/_0023overview_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#overview-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #overview-9.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover.html new file mode 100644 index 00000000..99dca3ac --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d1.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d1.html new file mode 100644 index 00000000..e4216ca1 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-1.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d10.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d10.html new file mode 100644 index 00000000..25b9fcc6 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-10.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d11.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d11.html new file mode 100644 index 00000000..f237b524 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-11.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d12.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d12.html new file mode 100644 index 00000000..47f334b4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-12.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d13.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d13.html new file mode 100644 index 00000000..4d5a18cc --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-13.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d14.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d14.html new file mode 100644 index 00000000..9ac2710a --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-14.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d15.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d15.html new file mode 100644 index 00000000..8e20e2c4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-15.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d16.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d16.html new file mode 100644 index 00000000..31c6bc4e --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-16.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d17.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d17.html new file mode 100644 index 00000000..16c13972 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-17.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d18.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d18.html new file mode 100644 index 00000000..496e25df --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-18.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d19.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d19.html new file mode 100644 index 00000000..7f969a18 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-19.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d2.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d2.html new file mode 100644 index 00000000..754e2994 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-2.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d20.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d20.html new file mode 100644 index 00000000..b5e35e43 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-20.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d21.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d21.html new file mode 100644 index 00000000..7986e052 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-21.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d22.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d22.html new file mode 100644 index 00000000..1b1761e8 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-22.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d23.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d23.html new file mode 100644 index 00000000..8c7842f9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-23.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d24.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d24.html new file mode 100644 index 00000000..cc31ec14 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d24.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-24 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-24.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d3.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d3.html new file mode 100644 index 00000000..cc74591e --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-3.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d4.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d4.html new file mode 100644 index 00000000..5b03c52c --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-4.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d5.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d5.html new file mode 100644 index 00000000..42a4781e --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-5.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d6.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d6.html new file mode 100644 index 00000000..aa172cc9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-6.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d7.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d7.html new file mode 100644 index 00000000..5ba14e9e --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-7.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d8.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d8.html new file mode 100644 index 00000000..20bb3b7f --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-8.

+ diff --git a/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d9.html b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d9.html new file mode 100644 index 00000000..df889e49 --- /dev/null +++ b/PR_0.0.21/html_split/_0023points_002dto_002dcover_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#points-to-cover-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #points-to-cover-9.

+ diff --git a/PR_0.0.21/html_split/_0023references.html b/PR_0.0.21/html_split/_0023references.html new file mode 100644 index 00000000..295f032b --- /dev/null +++ b/PR_0.0.21/html_split/_0023references.html @@ -0,0 +1,42 @@ + + + + + + +#references (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #references.

+ diff --git a/PR_0.0.21/html_split/_0023references_002don_002dlearning_002doutcomes.html b/PR_0.0.21/html_split/_0023references_002don_002dlearning_002doutcomes.html new file mode 100644 index 00000000..afd7614e --- /dev/null +++ b/PR_0.0.21/html_split/_0023references_002don_002dlearning_002doutcomes.html @@ -0,0 +1,42 @@ + + + + + + +#references-on-learning-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #references-on-learning-outcomes.

+ diff --git a/PR_0.0.21/html_split/_0023req_002dexpr.html b/PR_0.0.21/html_split/_0023req_002dexpr.html new file mode 100644 index 00000000..be5fc396 --- /dev/null +++ b/PR_0.0.21/html_split/_0023req_002dexpr.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr.

+ diff --git a/PR_0.0.21/html_split/_0023req_002dexpr_002dadvanced.html b/PR_0.0.21/html_split/_0023req_002dexpr_002dadvanced.html new file mode 100644 index 00000000..0c2f6ebc --- /dev/null +++ b/PR_0.0.21/html_split/_0023req_002dexpr_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023req_002dexpr_002dbasic.html b/PR_0.0.21/html_split/_0023req_002dexpr_002dbasic.html new file mode 100644 index 00000000..e7b6e2be --- /dev/null +++ b/PR_0.0.21/html_split/_0023req_002dexpr_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr-basic.

+ diff --git a/PR_0.0.21/html_split/_0023req_002dexpr_002dmain.html b/PR_0.0.21/html_split/_0023req_002dexpr_002dmain.html new file mode 100644 index 00000000..ff5344d4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023req_002dexpr_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#req-expr-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #req-expr-main.

+ diff --git a/PR_0.0.21/html_split/_0023static_002dassert.html b/PR_0.0.21/html_split/_0023static_002dassert.html new file mode 100644 index 00000000..da36a13f --- /dev/null +++ b/PR_0.0.21/html_split/_0023static_002dassert.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert.

+ diff --git a/PR_0.0.21/html_split/_0023static_002dassert_002dadvanced.html b/PR_0.0.21/html_split/_0023static_002dassert_002dadvanced.html new file mode 100644 index 00000000..eee9348a --- /dev/null +++ b/PR_0.0.21/html_split/_0023static_002dassert_002dadvanced.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert-advanced (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert-advanced.

+ diff --git a/PR_0.0.21/html_split/_0023static_002dassert_002dbasic.html b/PR_0.0.21/html_split/_0023static_002dassert_002dbasic.html new file mode 100644 index 00000000..c56c4c4b --- /dev/null +++ b/PR_0.0.21/html_split/_0023static_002dassert_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert-basic.

+ diff --git a/PR_0.0.21/html_split/_0023static_002dassert_002dmain.html b/PR_0.0.21/html_split/_0023static_002dassert_002dmain.html new file mode 100644 index 00000000..6a543ab9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023static_002dassert_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#static-assert-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #static-assert-main.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes.html b/PR_0.0.21/html_split/_0023student_002doutcomes.html new file mode 100644 index 00000000..708bfe9a --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d1.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d1.html new file mode 100644 index 00000000..32134023 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-1.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d10.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d10.html new file mode 100644 index 00000000..b4c873b5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-10.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d11.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d11.html new file mode 100644 index 00000000..3a7942b2 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-11.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d12.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d12.html new file mode 100644 index 00000000..f29e36d4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-12.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d13.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d13.html new file mode 100644 index 00000000..6150518d --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d13.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-13 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-13.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d14.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d14.html new file mode 100644 index 00000000..2e935354 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d14.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-14 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-14.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d15.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d15.html new file mode 100644 index 00000000..301528c6 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d15.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-15 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-15.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d16.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d16.html new file mode 100644 index 00000000..a46285f9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d16.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-16 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-16.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d17.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d17.html new file mode 100644 index 00000000..5d521344 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d17.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-17 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-17.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d18.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d18.html new file mode 100644 index 00000000..17ae7fb1 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d18.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-18 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-18.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d19.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d19.html new file mode 100644 index 00000000..6825f15f --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d19.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-19 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-19.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d2.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d2.html new file mode 100644 index 00000000..64d3027f --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-2.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d20.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d20.html new file mode 100644 index 00000000..1024fad4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d20.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-20 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-20.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d21.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d21.html new file mode 100644 index 00000000..5483b2b1 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d21.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-21 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-21.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d22.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d22.html new file mode 100644 index 00000000..a76c5900 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d22.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-22 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-22.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d23.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d23.html new file mode 100644 index 00000000..4052cec5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d23.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-23 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-23.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d24.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d24.html new file mode 100644 index 00000000..58553fbc --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d24.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-24 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-24.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d25.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d25.html new file mode 100644 index 00000000..27ee341a --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d25.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-25 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-25.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d3.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d3.html new file mode 100644 index 00000000..ad2ab983 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-3.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d4.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d4.html new file mode 100644 index 00000000..892f8724 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-4.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d5.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d5.html new file mode 100644 index 00000000..b186985b --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-5.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d6.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d6.html new file mode 100644 index 00000000..88cc2c22 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-6.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d7.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d7.html new file mode 100644 index 00000000..f7d2c142 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-7.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d8.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d8.html new file mode 100644 index 00000000..503399a1 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-8.

+ diff --git a/PR_0.0.21/html_split/_0023student_002doutcomes_002d9.html b/PR_0.0.21/html_split/_0023student_002doutcomes_002d9.html new file mode 100644 index 00000000..7d042383 --- /dev/null +++ b/PR_0.0.21/html_split/_0023student_002doutcomes_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#student-outcomes-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #student-outcomes-9.

+ diff --git a/PR_0.0.21/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html b/PR_0.0.21/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html new file mode 100644 index 00000000..03031b1e --- /dev/null +++ b/PR_0.0.21/html_split/_0023summary_002dof_002dmodules_002dand_002dtopics.html @@ -0,0 +1,42 @@ + + + + + + +#summary-of-modules-and-topics (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #summary-of-modules-and-topics.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction.html b/PR_0.0.21/html_split/_0023topic_002dintroduction.html new file mode 100644 index 00000000..761c29e9 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d1.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d1.html new file mode 100644 index 00000000..0608d324 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d1.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-1 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-1.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d10.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d10.html new file mode 100644 index 00000000..1316b505 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d10.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-10 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-10.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d11.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d11.html new file mode 100644 index 00000000..c243a02e --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d11.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-11 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-11.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d12.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d12.html new file mode 100644 index 00000000..63913174 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d12.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-12 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-12.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d2.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d2.html new file mode 100644 index 00000000..29e91741 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d2.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-2 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-2.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d3.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d3.html new file mode 100644 index 00000000..480fa322 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d3.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-3 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-3.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d4.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d4.html new file mode 100644 index 00000000..e99c6f1e --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d4.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-4 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-4.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d5.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d5.html new file mode 100644 index 00000000..3e51900f --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d5.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-5 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-5.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d6.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d6.html new file mode 100644 index 00000000..624436b4 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d6.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-6 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-6.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d7.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d7.html new file mode 100644 index 00000000..dbb24806 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d7.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-7 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-7.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d8.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d8.html new file mode 100644 index 00000000..221f0e00 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d8.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-8 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-8.

+ diff --git a/PR_0.0.21/html_split/_0023topic_002dintroduction_002d9.html b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d9.html new file mode 100644 index 00000000..3947a1e5 --- /dev/null +++ b/PR_0.0.21/html_split/_0023topic_002dintroduction_002d9.html @@ -0,0 +1,42 @@ + + + + + + +#topic-introduction-9 (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #topic-introduction-9.

+ diff --git a/PR_0.0.21/html_split/_0023udl.html b/PR_0.0.21/html_split/_0023udl.html new file mode 100644 index 00000000..a40420e8 --- /dev/null +++ b/PR_0.0.21/html_split/_0023udl.html @@ -0,0 +1,42 @@ + + + + + + +#udl (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #udl.

+ diff --git a/PR_0.0.21/html_split/_0023udl_002dbasic.html b/PR_0.0.21/html_split/_0023udl_002dbasic.html new file mode 100644 index 00000000..bff1ed54 --- /dev/null +++ b/PR_0.0.21/html_split/_0023udl_002dbasic.html @@ -0,0 +1,42 @@ + + + + + + +#udl-basic (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #udl-basic.

+ diff --git a/PR_0.0.21/html_split/_0023udl_002dmain.html b/PR_0.0.21/html_split/_0023udl_002dmain.html new file mode 100644 index 00000000..fa8fd258 --- /dev/null +++ b/PR_0.0.21/html_split/_0023udl_002dmain.html @@ -0,0 +1,42 @@ + + + + + + +#udl-main (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #udl-main.

+ diff --git a/PR_0.0.21/html_split/_0023use_002dof_002dthis_002ddocument.html b/PR_0.0.21/html_split/_0023use_002dof_002dthis_002ddocument.html new file mode 100644 index 00000000..47a11826 --- /dev/null +++ b/PR_0.0.21/html_split/_0023use_002dof_002dthis_002ddocument.html @@ -0,0 +1,42 @@ + + + + + + +#use-of-this-document (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #use-of-this-document.

+ diff --git a/PR_0.0.21/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html b/PR_0.0.21/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html new file mode 100644 index 00000000..ad40c81d --- /dev/null +++ b/PR_0.0.21/html_split/_0023working_002dgroup_002ddocuments_002drelated_002dto_002dc_002dteaching_002dguidelines.html @@ -0,0 +1,42 @@ + + + + + + +#working-group-documents-related-to-c-teaching-guidelines (Guidelines for Teaching C++) + + + + + + + + + + + + + + + +

The node you are looking for is at #working-group-documents-related-to-c-teaching-guidelines.

+ diff --git a/PR_0.0.21/html_split/index.html b/PR_0.0.21/html_split/index.html new file mode 100644 index 00000000..f00e67ca --- /dev/null +++ b/PR_0.0.21/html_split/index.html @@ -0,0 +1,378 @@ + + + + + +Top (Guidelines for Teaching C++) + + + + + + + + + + + + + + + + + + + + +
+ +
+

Guidelines for Teaching C++

+ + +
+

Table of Contents

+ +
+ + +
+
+
+
+ + + + + + diff --git a/PR_0.0.21/html_split/unknown_node.html b/PR_0.0.21/html_split/unknown_node.html new file mode 100644 index 00000000..a41d3531 --- /dev/null +++ b/PR_0.0.21/html_split/unknown_node.html @@ -0,0 +1,2465 @@ + + + + + +Guidelines for Teaching C++ + + + + + + + + + + + + + + + + +
+
+

+   [Contents]

+
+
+

7.1.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
  • General understanding of compile-time requirements +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function +
  2. Utilize static_assert to verify the results of meta-functions for +known values +
+ +
+
+
+
+

+   [Contents]

+
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

7.1.5.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • When writing a meta-function, use static_assert to test the +results +
  • Write static_assert calls at the scope of the code they are +guarding +
+ +
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+
+
+
+
+

+   [Contents]

+
+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

C++ offers a type safe way of passing around errors, contrary to the +C-style of error handling, by this, we prevent bugs when passing error +codes. Furthermore, error handling with error codes is more commonly +used than exception handling, which only should be used in exceptional +situations and in some environments is not feasible at all, e.g., in +embedded or performance critical software. +

+
+
+
+
+

+   [Contents]

+
+

7.2.3 Topic introduction

+

Very brief introduction to the topic. +

+

C++ offers std::error_code, which encapsulates error codes in a +type safe way. This topic describes how to use these error codes. +

+
+
+
+

+   [Contents]

+
+

7.2.4.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain +the message of the error code or check if an error occurred. +
  2. distinguish between the different categories and make justified +decisions when to use which +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

7.2.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • a brief overview of std::error_code and how to use it +
+ +
+
+
+

+   [Contents]

+
+

7.2.5.1 Background/Required Knowledge

+
    +
  • should know how to use reference parameters as an output parameter +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. create an error_code and design API that work with +std:error_code +
  2. write code that utilizes std::error_category +
  3. explain the difference between C-style error handling with errno and +std::error_code +
  4. make effective use of the interface of std::error_code +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.5.3 Caveats

+
    +
  • reset errno before calling a function that might set errno (better pass +an input parameter std::error_code) +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.5.4 Points to cover

+
    +
  • provide a full picture of std::error_code and it’s APIs +
  • std::error_category (explorative) +
+ +
+
+
+
+

+   [Contents]

+
+

7.2.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • implementing your own error_category +
+ +
+
+
+

+   [Contents]

+
+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Programs can run in a normal state or erroneous state. Students should +be able to identify different types of erroneous state and how to best +handle them. +

+
+
+
+
+

+   [Contents]

+
+

7.3.3 Topic introduction

+

Very brief introduction to the topic. +

+

This topic is an umbrella topic that refers to the different topics for +types of errors and error handling. +

+
+
+
+

+   [Contents]

+
+

7.3.4.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Describe different kinds of errors and exceptional situations that +require different approaches of error handling. +
  2. Provide some examples of the different error categories. +
  3. Identify potential erroneous code sections and attribute them to +different error categories. +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+
+
+
+

+   [Contents]

+
+

7.3.4.4 Points to cover

+

This section lists important details for each point. +

+

Errors can happen at different times during software lifetime. +

+
    +
  • Compile-time errors +
  • Link-time errors +
  • Execution-time errors +
+ +

There are different types of errors +

+
    +
  • Logic errors (violations of logical preconditions) +
  • Run-time errors (errors during code execution due to causes that are +external to the program) +
+ +
+
+
+

+   [Contents]

+
+

7.3.5.1 Background/Required Knowledge

+ +
+
+
+
+

+   [Contents]

+
+

7.3.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. pick the right error handling approach for a given problem. +
  2. enumerate different error handling strategies. +
  3. make a clear distinction between error-handling code and normal-case +handling code +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.5.3 Caveats

+
    +
  • The different error handling strategies have different trade-offs +(runtime performance, readability, …) +
  • The trade-off space depends on the run-time context (embedded, …) +
  • There also exist unhandleable errors (e.g., ODR violations, undefined +behavior) +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.5.4 Points to cover

+ + +
+
+
+
+

+   [Contents]

+
+

7.3.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+
+

+   [Contents]

+
+

7.3.7 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

7.3.8 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Exception handling is used to be able to continue the program in case of +exceptional situations (like requesting a ridiculous amount of memory: +bad_alloc). +

+
+
+
+
+

+   [Contents]

+
+

7.3.9 Topic introduction

+

Very brief introduction to the topic. +

+

There are other forms of handling difficult situations, but here we +concentrate on exception handling and the peculiarities/characteristics +of it. Because there are different forms, we should know when to use +which type of handling special situations. +

+
+
+
+

+   [Contents]

+
+

7.3.10.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.3.10.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Explain how some std:: calls may cause an exception +
  2. Discern the different standard exception types +
  3. Write simple try … except code (e.g., out of memory, vector at +indexing) +
  4. Explain on a “simplified” conceptual level what happens when an +exception is thrown and is bubbled up through the callers until it is +caught +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.10.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Exceptions should be used for exceptional situations and should not be +used to manage normal control flow. +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.10.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Exception hierarchy from the standard library +
  • Common library functions that may throw exceptions +
  • Basic handling exceptions: try/catch/throw +
  • How exceptions bubble up until caught +
+ +
+
+
+

+   [Contents]

+
+

7.3.11.1 Background/Required Knowledge

+
    +
  • RAII +
  • Order of construction/destruction of class members +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.11.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Explain the four different exception guarantees +
  2. Explain the exception guarantees that the standard library containers +offer. +
  3. Explain what happens when a exception is thrown in constructor +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.11.3 Caveats

+
    +
  • Make sure code is designed with RAII in mind to prevent resources +leaking during exception handling, when the stack is unwound. +
  • Care should be taken in constructor design to make all fully constructed +members deleted when the stack unwinding mechanism is activated. +
+ +
+
+
+
+

+   [Contents]

+
+

7.3.11.4 Points to cover

+
    +
  • Exception guarantees: Nothrow/Strong/Basic/No +
  • Rethrowing an exception +
+ +
+
+
+

+   [Contents]

+
+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of +expressions by given parameters
MainDefine and use requires-expressions to check properties of +expressions
Advanced
+ +
+
+
+
+

+   [Contents]

+
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Requires-expressions allow a developer to perform compile-time +evaluation on the validity of other expressions. These are fundamental +to the ability to write concepts. +[Compile-time programming: concepts] +

+
+
+
+
+

+   [Contents]

+
+

7.5 Topic introduction

+

Very brief introduction to the topic. +

+

Requires-expressions are compile-time predicates which evaluate to true +when their specified set of expressions are all valid for a given set of +inputs. +

+ + +
+
+
+

+   [Contents]

+
+

7.5.1.1 Background/Required Knowledge

+

A student is able to: +

+ + +

It is helpful if: +

+
    +
  • The student is aware that attempting to specialize the template with +types or values which do not match otherwise unstated assumptions will +cause errors within the template. +
+ +
+
+
+
+

+   [Contents]

+
+

7.5.1.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write a simple-requirement to assert the validity of an expression +
  2. Write a type-requirement to check the existence of a type by its +identifier +
  3. Write a compound-requirement to test the resulting type of an expression +
  4. Write a nested-requirement to test the constexpr value of an operation, +as opposed to just the syntactic validity +
  5. Use a requires-expression within a concept, requires-clause, or +if constexpr condition +
+ +
+
+
+
+

+   [Contents]

+
+

7.5.1.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

To require that expressions, which evaluate to a boolean value like +sizeof(t) == 4, evaluate to true a nested-requirement is +needed (e.g., requires sizeof(t) == 4;). Omitting the +requires results in a simple-requirement, which is satisfied +based purely on syntactic validity, not on the result of the operation. +

+
+
+
+
+

+   [Contents]

+
+

7.5.1.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • All requires-expression requirements terminate with a semicolon. +
  • simple-requirements are used to check that an expression is well-formed. +
  • nested-requirements are introduced with requires and primarily +used to check the result of an expression computable by the compiler, +including concepts or other requires-expressions. +
  • type-requirements are introduced with typename and used to verify +the existence of a type with a particular identifier. +
  • compound-requirements are enclosed in braces and can be used to check +the resulting type of an expression. +
  • Checks are performed by the compiler, not at run time. +
  • If covering usage of requires-expression with requires-clause, +[Compile-time programming: +requires clause] demonstrate requires requires and show how to +ever avoid writing it by using a concept. +[Compile-time programming: concepts] +
+ +
+
+
+

+   [Contents]

+
+

7.5.2.1 Background/Required Knowledge

+
    +
  • All of the above. +
  • Knowledge of noexcept +
+ +

A student is able to: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.5.2.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Write compound-requirements which test the noexceptness of an +expression. +
  2. Use a concept as the target of a compound-requirement. +
+ +
+
+
+
+

+   [Contents]

+
+

7.5.2.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

7.5.2.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Compound-requirements allow the optional ability to test whether an +expression is marked as noexcept, by using a trailing +noexcept keyword. +
+ +
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
+
    +
  • If the return-type-requirement of a compound-requirement is a concept, +that concept is given the resulting type as the first parameter, +followed by the specified parameters in the compound-requirement. +{ ++x } -> C<int> would substitute +C<decltype((++x)), int> and check that concept C is satisfied for +those parameters. +
+ +
+
+
+
+

+   [Contents]

+
+

7.5.3 Advanced

+ +
+
+
+

+   [Contents]

+
+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Functions in C++ may be overloaded with different numbers and types of +parameters. It may be of value to specify default arguments for some +number of parameters, to allow a caller to avoid specifying arguments +that rarely change, or to enable expanding the set of parameters while +maintaining backward compatibility with existing callers. +

+ + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+ +
+
+
+
+

+   [Contents]

+
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Default arguments allow the omission of arguments with obvious or common +values. Also may be utilized to extend an existing function signature +without forcing changes to existing calling code. +

+
+
+
+
+

+   [Contents]

+
+

7.6.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how default arguments work and how to define them. +

+
+
+
+

+   [Contents]

+
+

7.6.4.1 Background/Required Knowledge

+

A student is able to: +

+ + +
+
+
+
+

+   [Contents]

+
+

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call to a function with a default argument with or without that argument +specified +
  2. Declare a function with a default argument, and omit the default in the +definition’s signature +
  3. Explain when the lifetime of a default argument begins and ends +
+ +
+
+
+
+

+   [Contents]

+
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • When no forward-declaration exists, the definition serves as the +declaration +
  • When multiple declarations exist, only one may specify the default for +any particular parameter, but multiple declarations may specify the +defaults for different parameters. +
  • Additional default values may be specified for other parameters in +repeat declarations +
  • Calling an overloaded function with fewer arguments may be ambiguous +with regard to an overload with default arguments +
+ +
+
+
+
+

+   [Contents]

+
+

7.6.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Default value may only be specified once for each parameter among all +declarations +
  • Default values must start from the rightmost parameter and continue +leftward without gaps +
  • Considerations of when to use default arguments vs overload set +
+ +
+
+
+

+   [Contents]

+
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
+
+
+
+

+   [Contents]

+
+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

7.6.5.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+
+

+   [Contents]

+
+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

Subsequent redeclarations of the same function may add default argument +values, which are then usable by callers. Though a single parameter +cannot be given a default argument twice in the same translation unit, +it is legal, though ill-advised, to give the same function different +default arguments in different translation units. +

+
+
+
+

+   [Contents]

+
+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Literals are a way to write values in the code, such as strings and +numbers. User-defined literals (UDL) allow to add a suffix to a string +or number to change the meaning. The suffix selects a function (an +operator) that can alter the value and type of the literal. The C++ +library provides certain operators already and a user can add more by +providing such operators. +

+ + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+ +
+
+
+
+

+   [Contents]

+
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • Allows clearer expression of intent in C++. +
  • std::string: "Hello, world!"s +
  • std::chrono: 3h + 10min + 5s +
+ +
+
+
+
+

+   [Contents]

+
+

7.7.3 Topic introduction

+

Very brief introduction to the topic. +

+
    +
  • Explain the existence of user defined literals. Example: +12min + 17s is terse, expressive and type safe. +
+ +
+
+
+

+   [Contents]

+
+

7.7.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means +a float of value 1.5. * is familiar with the major C++ +types: * bool (Boolean type) * int (Integer type) * +double (Floating-point type) * std::string (Text type) * +std::vector (Collection type) * knows that namespaces exist, and +namespace std. * knows what using-declarations and +using-directives are. [C++ object +model: declarations] +

+
+
+
+
+

+   [Contents]

+
+

7.7.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. use using namespace std::string_literals[1]. +
  2. recognise UDLs in code that they are reading. +
  3. figure out which UDL definitions for a used type exist. +
  4. identify parts of the standard library that make use of UDLs. +
  5. prevent the dangers of temporaries created with "blah"s as well +as with std::string{"blah"}. +
  6. effectively selects the right set of namespaces in using-directives from +the sub-namespaces std::literals. +
+ +

[1]: explain that it’s okay to use a using-directive to “activate” +UDLs. +

+
+
+
+
+

+   [Contents]

+
+

7.7.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • A student gets confused by the similarities and differences between +built-in suffixes and UDLs and between UDLs from different namespaces. +
  • A student “activates” two suffixes with the same signature from +different namespaces. +
+ +
+
+
+
+

+   [Contents]

+
+

7.7.4.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+

+   [Contents]

+
+

7.7.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
+ +
+
+
+
+

+   [Contents]

+
+

7.7.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. write a UDL operator of their own. +
  2. separate unrelated UDLs into distinct namespaces. +
+ +
+
+
+
+

+   [Contents]

+
+

7.7.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. #### Points to cover +

+

This section lists important details for each point. +

+

No caveats at present. ### Advanced {#udl-advanced} +

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

8.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Level +Objectives +Foundational +Defining and calling functions with values +Main +Advanced +

+
+
+
+
+

+   [Contents]

+
+

8.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

The fundamental element for code-reuse is a function. For functions to +be useful, we need to parameterize them. Understanding how to do such is +thus fundamental to programming in any language. +

+
+
+
+
+

+   [Contents]

+
+

8.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain how to define functions with parameters and call them with +values. +

+
+
+
+

+   [Contents]

+
+

8.4.1 Background/Required Knowledge

+

A student is able to: +

+
    +
  • Explain what a function is +
+ +
+
+
+
+

+   [Contents]

+
+

8.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Call a function with any number of parameters using the same number of +arguments +
  2. Define a function with any number of parameters +
+ +
+
+
+
+

+   [Contents]

+
+

8.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

8.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • A function is called by invoking the name of the function, followed by +parentheses +
  • For each parameter in the function signature, a value must be provided, +and in the same order +
  • Multiple values passed to a function are comma-separated +
  • When defining a function, you must list the parameters with the type +first, and parameter name second +
+ +
+
+
+

+   [Contents]

+
+

8.5.1 Background/Required Knowledge

+ +
+
+
+
+

+   [Contents]

+
+

8.5.2 Student outcomes

+ +
+
+
+
+

+   [Contents]

+
+

8.5.3 Caveats

+ +
+
+
+
+

+   [Contents]

+
+

8.5.4 Points to cover

+ +
+
+
+
+

+   [Contents]

+
+

8.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

9.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+

Level +Objectives +Foundational +Avoiding copies using const-reference modifiers +Main +Using references to modify external data +Advanced +

+
+
+
+
+

+   [Contents]

+
+

9.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
+
+
+
+

+   [Contents]

+
+

9.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explain what a reference type is and how it constrasts with a value +type. +

+
+
+
+
+

+   [Contents]

+
+

9.4 Foundational: Using reference types to avoid copies

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+
+
+

+   [Contents]

+
+

9.4.1 Background/Required Knowledge

+

A student is able to: +

+
    +
  • Define and call a function with parameters +
+ +
+
+
+
+

+   [Contents]

+
+

9.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. Use const-refernce types for function arguments +
  2. Explain what considerations to take when deciding whether or not to use +a const-reference type +
+ +
+
+
+
+

+   [Contents]

+
+

9.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
+
+
+
+

+   [Contents]

+
+

9.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • No copy of the data is made when taken by constant reference +
  • A constant reference value cannot be modified +
  • The lifetime of a constant reference cannot be expected to extend beyond +the lifetime of the function, so the reference should not be saved off +for future use. +
  • Taking a reference is not always a time or space savings. Modern +machines may use 8-bytes to reference a 4-byte integer, for instance. +
+ +
+
+
+
+
+

+   [Contents]

+
+

9.5 Main: Using references to modify external data

+ + +
    +
  • Background/Required Knowledge
  • +
  • Student outcomes
  • +
  • Caveats
  • +
  • Points to cover
  • +
+
+
+
+

+   [Contents]

+
+

9.5.1 Background/Required Knowledge

+
    +
  • All of the above +
+ +
+
+
+
+

+   [Contents]

+
+

9.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Define and utilize a non-const reference for passing values out of a +function +
+ +
+
+
+
+

+   [Contents]

+
+

9.5.3 Caveats

+ +
+
+
+
+

+   [Contents]

+
+

9.5.4 Points to cover

+
    +
  • If the function does not intend to modify the value, const-references +should be preferred +
  • A reference value may be modified +
  • The lifetime of a reference cannot be expected to extend beyond the +lifetime of the function, so the reference should not be saved off for +future use. +
  • Taking a reference is not always a time or space savings. Modern +machines may use 8-bytes to reference a 4-byte integer, for instance. +
+ +
+
+
+
+
+

+   [Contents]

+
+

9.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
+
+
+

+   [Contents]

+
+

9.7.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
Foundational— Knowledge about build systems
Main— Usage of build system to compile a executable
Advanced— Add external libraries as a dependencies
+ +
+
+
+
+

+   [Contents]

+
+

9.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • Building complex C++ projects by hand is tricky +
  • Build systems can help to resolve dependencies +
  • Build systems can help do distribute C++ code and help other to compile +the code +
  • Build systems can help to find and include libraries as dependencies +
  • Build systems faciliate project management +
  • All major C++ projects are distributed with build systems +
+ +
+
+
+
+

+   [Contents]

+
+

9.7.3 Topic introduction

+

Very brief introduction to the topic. +

+

Build systems are used to configure, build, and install complex C++ +projects. +

+
+
+
+

+   [Contents]

+
+

9.7.4.1 Background/Required Knowledge

+

A student: * Should know how to compile and link C++ programs +

+
+
+
+
+

+   [Contents]

+
+

9.7.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. To explain what a build system is +
  2. To explain that a build systems resolves dependencies +
  3. To explain that a build system supports compilation for different +operating systems and architectures +
+ +
+
+
+
+

+   [Contents]

+
+

9.7.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

None +

+
+
+
+
+

+   [Contents]

+
+

9.7.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Mention that many build systems are available for C++ +
  • Mention benefits and challenges +
  • Build system help to only compile the C++ files with code changes and +not the complete project +
+ +
+
+
+

+   [Contents]

+
+

9.7.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
+ +
+
+
+
+

+   [Contents]

+
+

9.7.5.2 Student outcomes

+

A student should be able to: +

+
    +
  1. Download a C++ package and build the package +
  2. Write a configuration file to compile a C++ executable +
  3. Pass compiler options via the build system +
  4. Use the build system to generate the executable +
  5. Write a configuration file to compile a library and link the library to +a C++ executable +
+ +
+
+
+
+

+   [Contents]

+
+

9.7.5.3 Caveats

+

The instructions are restricted to the chosen build system and not +easily transferable. +

+
+
+
+
+

+   [Contents]

+
+

9.7.5.4 Points to cover

+
    +
  • Include paths to header files to the configuration +
  • Adding compiler flags +
  • How to build Release and Debug builds +
  • Linking external libraries to the C++ project +
  • Support compilation on different operating systems, compilers, and +architectures +
+ +
+
+
+
+

+   [Contents]

+
+

9.7.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • How to build libraries +
  • How to have external libraries be downloaded during the build process +
  • Mention that build systems provide support for unit testing +
+ +

See user-defined-literals. +

+
+
+
+

+   [Contents]

+
+

9.8.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+ +
+
+
+
+

+   [Contents]

+
+

9.8.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • A definition is a declaration that supplies all that is needed for a +complete entity +
  • int baz = 42; +
  • void bar() { /* implementation */ } +
  • class Foo { /* class body */ }; +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.3 Topic introduction

+

Very brief introduction to the topic. +

+

A definition extends a declaration, providing all that is needed for a +complete entity, e.g., allocate memory for variables, provide the +implementation for functions, complete definitions of data and function +members of a class. +

+
+
+
+

+   [Contents]

+
+

9.8.4.1 Background/Required Knowledge

+

A student: +

+ + +
+
+
+
+

+   [Contents]

+
+

9.8.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. define a variable with a specific type int baz = 42; +
  2. define a function void bar() {} +
  3. define a class class Foo {}; +
  4. explain the one definition rule +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+
+
+
+

+   [Contents]

+
+

9.8.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • One definition rule (ODR) +
+ +
+
+
+

+   [Contents]

+
+

9.8.5.1 Background/Required Knowledge

+ + +
+
+
+
+

+   [Contents]

+
+

9.8.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. organize variables, functions, classes into multiple translation units, +describing interface with declarations and providing the implementations +with definitions without violating ODR. +
  2. distinguish between template declaration and definition +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Putting a definition into a header file that is included more than once +leads to ODR violations, possibly resulting in linker errors. +
+ +
+
+
+
+

+   [Contents]

+
+

9.8.5.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+

+   [Contents]

+
+

9.9.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+ +
+
+
+
+

+   [Contents]

+
+

9.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+

Copy semantics allows the user to define how objects of a class get +replicated and interact on a value level. +

+
+
+
+
+

+   [Contents]

+
+

9.9.3 Topic introduction

+

Very brief introduction to the topic. +

+

Explains when and how objects are copied. +

+
+
+
+

+   [Contents]

+
+

9.9.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? +[C++ object model: types] * explain what +an object is? [C++ object model: +objects], [C++ object model: +constant objects] * define and understand class invariants? +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain special member functions +[C++ object model: +special member functions] +

+
+
+
+
+

+   [Contents]

+
+

9.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. explain what copy semantics accomplish +
+ +
    +
  • establishing “equivalent” object state in another object +
+ +
    +
  1. explain difference between copying a reference and copying a value* +
  2. explain where copies are made +
+ +

* In other languages these differences are sometimes referred to as +shallow and deep copy. +

+
+
+
+
+

+   [Contents]

+
+

9.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Compiler-provided copy operations may result in ownership problems +(e.g., char*). These ownership problems can generally be solved +by using types whose copy operations have the appropriate semantics, +e.g., std::string instead of char* to hold string values. +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.4.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero +
    • Copying of types, with user defined copy operations +
    • Copying an object does not change the original +
    + +
  • Practical applications +
      +
    • std::unique_ptr (has no copy) +
    • Strings (copies the value) +
    + +
+ +
+
+
+

+   [Contents]

+
+

9.9.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions +[C++ object model: +special member functions] +

+

It helps when a student is able to: * use move semantics +[C++ object model: move +semantics] * explain the rule of zero +[C++ object model: rule-of-zero] +* explain the rule of five [C++ +object model: rule-of-five] +

+
+
+
+
+

+   [Contents]

+
+

9.9.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: * explain when they have to implement the +copy operations for their own type * Copy constructor * Copy assignment +operator * implement copy operations for their own types * +Optional: explain when copying with basic and strong exception +guarantees is useful +

+
+
+
+
+

+   [Contents]

+
+

9.9.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 +std::auto_ptr) +
    + +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.5.4 Points to cover

+

This section lists important details for each point. +

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations +
    • =default, =delete (No copy) +
    • How-to write your own copy operations +
    • Rule-of-five +
    • Copy assignment operators can be ref-qualified to avoid assigning into +temporary objects. +
    + +
+ +
+
+
+
+

+   [Contents]

+
+

9.9.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+

When can copies be elided and when does the standard guarantee copy +elision. References: * Abseil tip of +the Week #166 * +cppreference +- Copy elision +

+
+
+
+

+   [Contents]

+
+

9.10.1 Overview

+

Provides a short natural language abstract of the module’s +contents. Specifies the different levels of teaching. +

+ + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+ +
+
+
+
+

+   [Contents]

+
+

9.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this +topic? +

+
    +
  • Introduces a name and it’s type +
  • int baz; +
  • void bar(); +
  • class Foo; +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.3 Topic introduction

+

Very brief introduction to the topic. +

+

Introduce names and their associated type in a scope. +

+
+
+
+

+   [Contents]

+
+

9.10.4.1 Background/Required Knowledge

+

A student: +

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type) +
    • int (Integer type) +
    • double (Floating-point type) +
    + +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. declare a variable with a specific type ‘int baz;’ +
  2. declare a function ‘void bar();’ +
  3. declare a class ‘class Foo;’ +
  4. forward declare a user-defined type or a function +
  5. explain the difference between a definition and a declaration +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+

No caveats at present. +

+
+
+
+
+

+   [Contents]

+
+

9.10.4.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+

+   [Contents]

+
+

9.10.5.1 Background/Required Knowledge

+
    +
  • All of the above. +
  • Basic template syntax +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.5.2 Student outcomes

+

A list of things “a student should be able to” after the +curriculum. The next word should be an action word and testable +in an exam. Max 5 items. +

+

A student should be able to: +

+
    +
  1. create header and source files with a declaration in the former and +definition of a variable/function in the latter +
  2. declare type aliases to introduce a type with an alternative name ‘using +std::string;’ +
  3. write a forward template declaration +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.5.3 Caveats

+

This section mentions subtle points to understand, like anything +resulting in implementation-defined, unspecified, or undefined +behavior. +

+
    +
  • Declaring aliases can introduce name clashes +
  • Prefer using declaration’s over using directives in header files [link] +
  • The order of declarations dictates the order of initialization +
+ +
+
+
+
+

+   [Contents]

+
+

9.10.5.4 Points to cover

+

This section lists important details for each point. +

+
+
+
+
+

+   [Contents]

+
+

9.10.6 Advanced

+

These are important topics that are not expected to be covered but +provide guidance where one can continue to investigate this topic in +more depth. +

+
    +
  • asm declaration +
  • using-enum-declaration +
  • extern “C” declarations +
+ +

See concepts. +

+
+ + + + + diff --git a/README.md b/README.md deleted file mode 100644 index a005c172..00000000 --- a/README.md +++ /dev/null @@ -1,109 +0,0 @@ -Guidelines for Teaching C++ -=========================== - -This repository contains the source for the document: - - - Guidelines for Teaching C++ - -When the repository is tagged, this document is automatically built -and made available via GitHub Pages at: - - - - -# Prerequisites for Building the Document - -The following software is needed to build the document: - - - pandoc - - aspell - - various basic POSIX utilities, including (amongst others): - - make - - awk - - sed - -If one would like to build the document in PDF format, the -following software is also required: - - - LaTex - -# Building the Document - -To build the document, simply type: - - 1. make clean - 2. make all - 3. make install - -(Strictly speaking, step 2 can be skipped, since the install target -has a dependency on the all target.) - -The above commands will build the document in several formats: - - - HTML format as a single HTML document: - install/html/index.html - - EPUB format: - guidelines.epub - - HTML format split across multiple HTML documents: - install/html_split/index.html - -A make target called world is also defined. Building this target (i.e., -"make world") will generate the document in additional formats, including -PDF format, but requires that LaTeX be installed. - -The build process performs spell checking. -The build will fail if any spelling errors are detected. - -# Spell Checking - -Words that are flagged as having spelling errors can be classified -into two categories: - - 1. valid English words (such as technical terms) that are not in - the spell checker's dictionary - 2. words that are not really "proper" English words but are also not - really errors either (e.g., people's names) - -Words in category 1 should be added to the file -config/spellcheck/wordlist. -Words in category 2 should be added to the file -config/spellcheck/ignored_words.txt - -# Repository Organization - -The files in this repository are organized into directories as follows: - -- config: - This directory contains configuration files that control various - aspects of how the guidelines document is built. - - pandoc_templates: - This directory contains document templates used by pandoc during - the document build process. - - spellcheck: - The directory contains lists of additional words and ignorable errors - for spell checking. -- sources: - This directory hierarchy contains the source files for the document. - - css: - This directory contains CSS files used by the document when built - in HTML format. - - images: - This directory contains images used in the document. - - modules: - The directory hierarchy contains the information for individual modules - and topics. There is one directory per module and one file per topic. -- tools: - The directory hierarchy contains various scripts and other tools used for - building and deploying the document to GitHub pages site. - - build: - This directory contains scripts used for building and deploying the - document. - - old: - This directory hierachy needs to be reorganized. This directory - should probably be renamed and its contents possibly reorganized - or relocated elsewhere. - - tools - - tests - - TEST_INPUTS - - pandoc_filters: - This directory contains various filters needed for pandoc. These - filters do things such as allow markdown-aware spell checking. diff --git a/config/pandoc_templates/bootstrap_menu.html b/config/pandoc_templates/bootstrap_menu.html deleted file mode 100644 index ff41b510..00000000 --- a/config/pandoc_templates/bootstrap_menu.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$for(author-meta)$ - -$endfor$ -$if(date-meta)$ - -$endif$ - $if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ - -$if(quotes)$ - -$endif$ -$if(highlighting-css)$ - -$endif$ -$for(css)$ - -$endfor$ -$if(math)$ - $math$ -$endif$ -$for(header-includes)$ - $header-includes$ -$endfor$ - - - - - $if(title)$ - - $endif$ -
-
- $if(toc)$ -
-
- - $toc$ - -
-
- $endif$ -
- $for(include-before)$ - $include-before$ - $endfor$ - $body$ - $for(include-after)$ - $include-after$ - $endfor$ -
-
-
-$if(analytics)$ - - - - diff --git a/config/pandoc_templates/clean_menu.html b/config/pandoc_templates/clean_menu.html deleted file mode 100644 index 9848be5f..00000000 --- a/config/pandoc_templates/clean_menu.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$for(author-meta)$ - -$endfor$ -$if(date-meta)$ - -$endif$ - $if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ - - -$if(quotes)$ - -$endif$ -$if(highlighting-css)$ - -$endif$ -$for(css)$ - -$endfor$ -$if(math)$ - $math$ -$endif$ -$for(header-includes)$ - $header-includes$ -$endfor$ - - - - - $if(title)$ - -
- $else$ -
- $endif$ -
- $if(toc)$ -
-
- - $toc$ - -
-
- $endif$ -
- $for(include-before)$ - $include-before$ - $endfor$ - $body$ - $for(include-after)$ - $include-after$ - $endfor$ -
-
-
-$if(analytics)$ - - - - diff --git a/config/pandoc_templates/easy_template.html b/config/pandoc_templates/easy_template.html deleted file mode 100644 index e0ce071c..00000000 --- a/config/pandoc_templates/easy_template.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$for(author-meta)$ - -$endfor$ -$if(date-meta)$ - -$endif$ - $if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ - -$if(quotes)$ - -$endif$ -$if(highlighting-css)$ - -$endif$ -$for(css)$ - -$endfor$ -$if(math)$ - $math$ -$endif$ -$for(header-includes)$ - $header-includes$ -$endfor$ - - - - - $if(title)$ - - $endif$ -
-
- $if(toc)$ -
-
- - $toc$ - -
-
- $endif$ -
- $for(include-before)$ - $include-before$ - $endfor$ - $body$ - $for(include-after)$ - $include-after$ - $endfor$ -
-
-
-$if(analytics)$ - - - - diff --git a/config/pandoc_templates/elegant_bootstrap_menu.html b/config/pandoc_templates/elegant_bootstrap_menu.html deleted file mode 100644 index e0ce071c..00000000 --- a/config/pandoc_templates/elegant_bootstrap_menu.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -$for(author-meta)$ - -$endfor$ -$if(date-meta)$ - -$endif$ - $if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ - -$if(quotes)$ - -$endif$ -$if(highlighting-css)$ - -$endif$ -$for(css)$ - -$endfor$ -$if(math)$ - $math$ -$endif$ -$for(header-includes)$ - $header-includes$ -$endfor$ - - - - - $if(title)$ - - $endif$ -
-
- $if(toc)$ -
-
- - $toc$ - -
-
- $endif$ -
- $for(include-before)$ - $include-before$ - $endfor$ - $body$ - $for(include-after)$ - $include-after$ - $endfor$ -
-
-
-$if(analytics)$ - - - - diff --git a/config/pandoc_templates/uikit.html b/config/pandoc_templates/uikit.html deleted file mode 100644 index c1d6bb20..00000000 --- a/config/pandoc_templates/uikit.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - $if(title)$$title$$endif$ - - - -$if(template_css)$ - -$else$ - -$endif$ - - - - - - - - - - - - - - $for(author-meta)$ - - $endfor$ - $if(date-meta)$ - - $endif$ - - $if(version-meta)$ - - $endif$ - - $if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ - - $if(quotes)$ - - $endif$ - $if(highlighting-css)$ - - $endif$ - $for(css)$ - - $endfor$ - $if(math)$ - $math$ - $endif$ - $for(header-includes)$ - $header-includes$ - $endfor$ - - - - - -
- - $if(title)$ -
- - $if(version)$ -
- -
- $endif$ - -
-

$title$

- $if(date)$ -

$date$

- $endif$ - - $if(version)$ -

Version $version$

- $endif$ - - $for(author)$ -

$author$

- $endfor$ -
-
- $endif$ - -
-
-
- -
-
- -
-$body$ -
-
-$if(analytics)$ - -
- - diff --git a/config/spellcheck/ignored_words.txt b/config/spellcheck/ignored_words.txt deleted file mode 100644 index 94eacd07..00000000 --- a/config/spellcheck/ignored_words.txt +++ /dev/null @@ -1,38 +0,0 @@ -args -asm -baz -Bjarne -bool -checkmark -coe -constexpr -cppreference -Engelhart -enum -EPUB -errno -expr -explorative -extern -Florian -func -Furst -Hinnant -html -Hyland -JC -Krathwohl -ness -nothrow -NRVO -RAII -req -Rethrowing -RVO -Sattler -SG -Stroustrup -udl -Vandevoorde -ver -Winkel diff --git a/config/spellcheck/wordlist b/config/spellcheck/wordlist deleted file mode 100644 index 2a083dba..00000000 --- a/config/spellcheck/wordlist +++ /dev/null @@ -1,21 +0,0 @@ -ABI -API -APIs -boolean -computable -destructors -IDEs -invariants -lawyering -metaprogramming -namespace -namespaces -ODR -personal_ws-1.1 en 18 -preprocessor -redeclarations -SFINAE -toolchain -toolchains -UDL -UDLs diff --git a/sources/index.html b/index.html similarity index 100% rename from sources/index.html rename to index.html diff --git a/latest/images/cpp_logo.png b/latest/images/cpp_logo.png new file mode 100644 index 00000000..780e8a32 Binary files /dev/null and b/latest/images/cpp_logo.png differ diff --git a/latest/index.html b/latest/index.html new file mode 100644 index 00000000..29f5b8c0 --- /dev/null +++ b/latest/index.html @@ -0,0 +1,2263 @@ + + + + + + + Guidelines for Teaching C++ + + + + + + + + + + + + + + + + + + + + + Guidelines for Teaching C++ + + + + + + + + +
+ +
+ +
+ +
+ +
+

Guidelines for Teaching C++

+ +

Version PR_0.0.21

+ +

SG20 (ISO C++ Study Group on Education)

+
+
+ +
+
+
+ +
+
+ +
+

1 Obtaining This Document: The Most Recent Version and Alternate Formats

+

The most recent version of this document is available as an online HTML document at: https://cplusplus.github.io/SG20/latest/.

+

The version of the document that you are currently reading is available in the following formats:

+
    +
  1. online (HTML) format as a single large HTML document: https://cplusplus.github.io/SG20/PR_0.0.21/html

  2. +
  3. EPUB format: https://cplusplus.github.io/SG20/PR_0.0.21/guidelines.epub

  4. +
  5. online (HTML) format, split across multiple HTML documents: https://cplusplus.github.io/SG20/PR_0.0.21/html_split/ [Note: The support for this format needs more work (in order to beautify and fix linking issues).]

  6. +
+

Older versions of this document are also available. In general version ver is available at https://cplusplus.github.io/SG20/ver/html. For example, version 0.1.0 (assuming that this version exists) would be available at https://cplusplus.github.io/SG20/0.1.0/html.

+

2 Context and Aim of This Guide

+

This document is intended to serve as a resource for instructors to assist in the preparation of courses on C++ in a variety of settings, including university, college, and industry environments. The main objectives of this document are as follows:

+
    +
  • to provide guidelines for content to be covered by courses of various difficulty levels on C++ (e.g., topics and learning outcomes)
  • +
  • to note some common misunderstandings and problematic points that may be encountered when teaching particular topics
  • +
  • to suggest resources useful for teaching C++
  • +
  • to present examples of curriculum for specific courses
  • +
+

This document does not itself provide a curriculum for a single specific course, but is rather a set of guidelines that can be used to prepare curricula for a wide variety of courses that differ in focus and level of sophistication. (This said, however, some links to other documents with examples of curricula for specific courses may be included herein.) This document only intends to target the teaching of the most recently ratified version of the C++ standard. (This said, however, since older versions of this document are also available, these older versions may be of some use to those who need guidance in older versions of the standard, at least versions that do not predate C++20.)

+

3 Use of This Document

+

[NOTE: This document follows the same license model as the C++ Core Guidelines. The LICENSE document is taken verbatim from the C++ Core Guidelines.] This document is made available under a MIT-style license. In simple terms, this license permits copying, use, modification, and creation of derivative works. A copy of the license is included in the section LICENSE.

+

4 Contributing to This Document

+

Contributions to this document are welcome. If you would like to help with this project as a contributor, please read the section How to Contribute.

+

5 Organization of This Document

+

The various concepts (i.e., ideas) to potentially be covered are partitioned into modules. A module is very broad in scope and consists of numerous topics.

+

For each module, topics related to the module are identified. Then, for each topic, learning outcomes are specified. In order to address a wide variety of courses on C++, each topic is addressed at three proficiency levels. These proficiency levels allow each topic to be covered at more than one level of detail. This allows target audiences with different background and learning objectives to be accommodated. The three proficiency levels are as follows:

+
    +
  • foundational: This level gives the learner the idea that a facility exists, what benefits it offers, and the basic ways of using it.

  • +
  • main: This level shows mainstream uses and techniques. For abstraction and organizational mechanisms it also demonstrates how to build them. This level should also give the learner a basic (but not detailed) understanding of how a facility might be implemented so that the learner can have a first-order understanding of any costs involved.

  • +
  • advanced: This level gives information suitable for an expert. For most topics there is an expert level of knowledge that most programmers rarely need and techniques that require detailed understanding of language rules or library implementation.

  • +
+

The remainder of this document is organized as follows. The various topics are listed grouped by module. In cases where a topic might be classified into more than one module, the topic is listed under the module of most direct relevance. This is done in order to avoid duplication of content. (In the case that a topic is equally relevant to multiple modules, the decision of which to select is made by a proverbial coin toss.) The order in which modules and topics are presented is not meant to imply any order of coverage in a course. The order in which items are listed is essentially arbitrary.

+

6 Summary of Modules and Topics

+

In the sections that follow, the various modules and topics are presented. There is one section per module. For each module, a table listing the various topics in that module is provided. The ID for a topic is linked to the detailed coverage of that topic that comes later in the document. If a topic has any learning outcomes at a given proficiency level, this is indicated by a checkmark (“✔️”). If a topic has no learning outcomes (simply because there are not any, not because the information is missing), this is indicated by an em dash (“—”). In the case that the information for a topic is completely missing, a question mark (“?”) symbol is used.

+

6.1 Compilation Model

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Translation Units???
[?]Headers???
[?]Modules???
[?]Name Mangling???
[?]Phases of Translation???
[?]Separate Compilation???
[?]Linkage???
+

6.2 Preprocessor

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Preprocessor Metaprogramming???
[?]Inclusion???
[?]Macros???
+

6.3 Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Objects???
[?]Declarations???
[def]Definitions✔️✔️✔️
[?]Selection Constructs (e.g., if, ternary)???
[?]Looping Constructs (e.g., for, while, etc.)???
+

6.4 Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Calling Functions???
[?]Parameter Passing (e.g., Passing By Value and Reference)???
[func-args]Default Arguments✔️
[?]Returning Multiple Values???
[?]Overloading???
[udl]User-Defined Literals✔️✔️
+

6.5 User-Defined Types (Classes)

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Special Member Functions???
[?]Types???
[?]Conversions???
[?]Constructors and Destructors???
[?]Move/Copy Constructors and Assignment Operators???
[?]Member Functions???
[?]Sum Types???
[?]User-Defined Literals???
[?]Special Member Functions???
[?]Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero)???
[copy]Copy Semantics✔️✔️
[?]Moving and Copying???
[?]Lambdas???
+

6.6 Inheritance and Class Hierarchies

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Virtual Functions???
[?]Run-Time Type Information???
+

6.7 Compile-Time Computation

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Constant Expressions and Constant Evaluation???
[static-assert]static_assert✔️✔️
+

6.8 Generic Programming (Templates)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Concepts???
[?]SFINAE???
[?]Template Metaprogramming???
[?]Function Templates???
[?]Requires Clauses???
[req-expr]Requires Expressions✔️✔️
+

6.9 Error Handling

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[coe]Categories of Errors✔️✔️
[?]errno???
[?]Error Codes???
[eh]Exception Handling✔️✔️✔️
+

6.10 Standard Library

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Input/Output (I/O)???
[?]Containers, Iterators, and Algorithms???
+

6.11 External (i.e., Non Standard) Libraries

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Graphical User Interfaces???
+

6.12 Building

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Software Build Tools???
[?]Strategies for Handling Build Problems???
+

6.13 Testing and Debugging

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Source-Level Debuggers???
[?]Code Sanitizers???
[?]Test Frameworks???
[?]Debugging Strategies???
+

6.14 Tooling

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Compiler Toolchains???
[?]IDEs???
+

6.15 Software Design

+ + + + + + + + + + + + + + + + + + + +
IDUnitFoundationalMainAdvanced
[?]Design by Contract???
+

7 Detailed Information for Modules and Topics

+

7.1 Meta-error handling: static_assert

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.1.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalCalling static_assert with a constant expression
MainUsing static_assert to detect contract violations and improve error messages
Advanced
+

7.1.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

static_assert allows the developer to enforce that conditions which can be checked during compilation will force build errors when violated. Additionally, they are the best mechanism by which a developer can pass useful information to other developers regarding what violation occurred or what must be done, instead.

+

7.1.3 Topic introduction

+

Very brief introduction to the topic.

+

static_assert is a compile-time evaluated function that asserts the truth of a supplied predicate, issuing an optional user-supplied error message if the predicate is false.

+

7.1.4 Foundational: Calling static_assert with a constant expression

+

7.1.4.1 Background/Required Knowledge

+

A student:

+
    +
  • Should be able to explain the difference between code evaluated at compile-time and run-time
  • +
  • Should be able to cite some examples of compile-time known information, such as sizeof(T)
  • +
+

7.1.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Assert the expected size of a structure using static_assert
  2. +
+

7.1.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • X
  • +
  • In addition to what is wrong, a good error message will inform the user of how to correct it
  • +
+

7.1.5 Main: Contracts and static_assert

+

7.1.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • General understanding of compile-time requirements
  • +
+

7.1.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Utilize static_assert to verify preconditions of a meta-function
  2. +
  3. Utilize static_assert to verify the results of meta-functions for known values
  4. +
+

7.1.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.1.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • When writing a meta-function, use static_assert to test the results
  • +
  • Write static_assert calls at the scope of the code they are guarding
  • +
+
template<typename T>
+struct container {
+    std::map<int, T> vals;
+
+    // Test location #1
+    static_assert(
+        std::is_default_constructible_v<T>,
+        "container type T must be default constructible");i
+
+    void add(int key, T const& t) {
+        // Test location #2
+        static_assert(
+            std::is_default_constructible_v<T>,
+            "container type T must be default constructible");
+        // std::map::operator[] requires default constructible type for 
+        // the value. This will cause a build failure deep in the 
+        // implementation of std::map, when T is not default constructible
+        vals[key] = t;
+    }
+};
+
+struct NoDefCtor {
+    NoDefCtor() = delete;
+    NoDefCtor(double d) {}
+};
+
+container<NoDefCtor> c; // If Test #1 was omitted, this would succeed
+// This is ill-formed. Test #2 would catch this and provide a better 
+// error message for the user
+c.add(42, NoDefCtor(1.0)); 
+

7.1.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.2 Error handling: Error codes

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.2.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalHandling error codes with std::error_code
MainDesigning APIs around std::error_code
Advanced
+

7.2.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

C++ offers a type safe way of passing around errors, contrary to the C-style of error handling, by this, we prevent bugs when passing error codes. Furthermore, error handling with error codes is more commonly used than exception handling, which only should be used in exceptional situations and in some environments is not feasible at all, e.g., in embedded or performance critical software.

+

7.2.3 Topic introduction

+

Very brief introduction to the topic.

+

C++ offers std::error_code, which encapsulates error codes in a type safe way. This topic describes how to use these error codes.

+

7.2.4 Foundational: Handling error codes with std::error_code

+

7.2.4.1 Background/Required Knowledge

+

A student:

+ +

7.2.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write code to handle errors with std::error_code, e.g., obtain the message of the error code or check if an error occurred.
  2. +
  3. distinguish between the different categories and make justified decisions when to use which
  4. +
+

7.2.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.2.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • a brief overview of std::error_code and how to use it
  • +
+

7.2.5 Main: Designing APIs around std::error_code

+

7.2.5.1 Background/Required Knowledge

+
    +
  • should know how to use reference parameters as an output parameter
  • +
+

7.2.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. create an error_code and design API that work with std:error_code
  2. +
  3. write code that utilizes std::error_category
  4. +
  5. explain the difference between C-style error handling with errno and std::error_code
  6. +
  7. make effective use of the interface of std::error_code
  8. +
+

7.2.5.3 Caveats

+
    +
  • reset errno before calling a function that might set errno (better pass an input parameter std::error_code)
  • +
+

7.2.5.4 Points to cover

+
    +
  • provide a full picture of std::error_code and it’s APIs
  • +
  • std::error_category (explorative)
  • +
+

7.2.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • implementing your own error_category
  • +
+

7.3 Error handling: Categories of errors

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.3.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalCategories of errors
MainHandling different categories of errors
Advanced
+

7.3.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Programs can run in a normal state or erroneous state. Students should be able to identify different types of erroneous state and how to best handle them.

+

7.3.3 Topic introduction

+

Very brief introduction to the topic.

+

This topic is an umbrella topic that refers to the different topics for types of errors and error handling.

+

7.3.4 Foundational: Categories of errors

+

7.3.4.1 Background/Required Knowledge

+

A student:

+ +

7.3.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Describe different kinds of errors and exceptional situations that require different approaches of error handling.
  2. +
  3. Provide some examples of the different error categories.
  4. +
  5. Identify potential erroneous code sections and attribute them to different error categories.
  6. +
+

7.3.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

7.3.4.4 Points to cover

+

This section lists important details for each point.

+

Errors can happen at different times during software lifetime.

+
    +
  • Compile-time errors
  • +
  • Link-time errors
  • +
  • Execution-time errors
  • +
+

There are different types of errors

+
    +
  • Logic errors (violations of logical preconditions)
  • +
  • Run-time errors (errors during code execution due to causes that are external to the program)
  • +
+

7.3.5 Main: Handling different categories of errors

+

7.3.5.1 Background/Required Knowledge

+

7.3.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. pick the right error handling approach for a given problem.
  2. +
  3. enumerate different error handling strategies.
  4. +
  5. make a clear distinction between error-handling code and normal-case handling code
  6. +
+

7.3.5.3 Caveats

+
    +
  • The different error handling strategies have different trade-offs (runtime performance, readability, …)
  • +
  • The trade-off space depends on the run-time context (embedded, …)
  • +
  • There also exist unhandleable errors (e.g., ODR violations, undefined behavior)
  • +
+

7.3.5.4 Points to cover

+ +

7.3.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

7.3.7 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalStandards exception hierarchy
MainException guarantees
Advanced
+

7.3.8 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Exception handling is used to be able to continue the program in case of exceptional situations (like requesting a ridiculous amount of memory: bad_alloc).

+

7.3.9 Topic introduction

+

Very brief introduction to the topic.

+

There are other forms of handling difficult situations, but here we concentrate on exception handling and the peculiarities/characteristics of it. Because there are different forms, we should know when to use which type of handling special situations.

+

7.3.10 Foundational: Standards exception hierarchy

+

7.3.10.1 Background/Required Knowledge

+

A student:

+ +

7.3.10.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Explain how some std:: calls may cause an exception
  2. +
  3. Discern the different standard exception types
  4. +
  5. Write simple try … except code (e.g., out of memory, vector at indexing)
  6. +
  7. Explain on a “simplified” conceptual level what happens when an exception is thrown and is bubbled up through the callers until it is caught
  8. +
+

7.3.10.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Exceptions should be used for exceptional situations and should not be used to manage normal control flow.
  • +
+

7.3.10.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Exception hierarchy from the standard library
  • +
  • Common library functions that may throw exceptions
  • +
  • Basic handling exceptions: try/catch/throw
  • +
  • How exceptions bubble up until caught
  • +
+

7.3.11 Main: Exception guarantees

+

7.3.11.1 Background/Required Knowledge

+
    +
  • RAII
  • +
  • Order of construction/destruction of class members
  • +
+

7.3.11.2 Student outcomes

+

A student should be able to:

+
    +
  1. Explain the four different exception guarantees
  2. +
  3. Explain the exception guarantees that the standard library containers offer.
  4. +
  5. Explain what happens when a exception is thrown in constructor
  6. +
+

7.3.11.3 Caveats

+
    +
  • Make sure code is designed with RAII in mind to prevent resources leaking during exception handling, when the stack is unwound.
  • +
  • Care should be taken in constructor design to make all fully constructed members deleted when the stack unwinding mechanism is activated.
  • +
+

7.3.11.4 Points to cover

+
    +
  • Exception guarantees: Nothrow/Strong/Basic/No
  • +
  • Rethrowing an exception
  • +
+

7.3.12 Advanced: Exception-safe containers and edge cases

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • Rethrowing a modified exception
  • +
  • Writing exception safe containers
  • +
+

7.4 Module name: Requires Expressions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.4.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
FoundationalDefine and use requires-expressions to check satisfaction of expressions by given parameters
MainDefine and use requires-expressions to check properties of expressions
Advanced
+

7.4.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Requires-expressions allow a developer to perform compile-time evaluation on the validity of other expressions. These are fundamental to the ability to write concepts. [Compile-time programming: concepts]

+

7.5 Topic introduction

+

Very brief introduction to the topic.

+

Requires-expressions are compile-time predicates which evaluate to true when their specified set of expressions are all valid for a given set of inputs.

+

7.5.1 Foundational: Writing requires-expressions

+

7.5.1.1 Background/Required Knowledge

+

A student is able to:

+ +

It is helpful if:

+
    +
  • The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template.
  • +
+

7.5.1.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write a simple-requirement to assert the validity of an expression
  2. +
  3. Write a type-requirement to check the existence of a type by its identifier
  4. +
  5. Write a compound-requirement to test the resulting type of an expression
  6. +
  7. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity
  8. +
  9. Use a requires-expression within a concept, requires-clause, or if constexpr condition
  10. +
+

7.5.1.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

To require that expressions, which evaluate to a boolean value like sizeof(t) == 4, evaluate to true a nested-requirement is needed (e.g., requires sizeof(t) == 4;). Omitting the requires results in a simple-requirement, which is satisfied based purely on syntactic validity, not on the result of the operation.

+

7.5.1.4 Points to cover

+

This section lists important details for each point.

+
    +
  • All requires-expression requirements terminate with a semicolon.
  • +
  • simple-requirements are used to check that an expression is well-formed.
  • +
  • nested-requirements are introduced with requires and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions.
  • +
  • type-requirements are introduced with typename and used to verify the existence of a type with a particular identifier.
  • +
  • compound-requirements are enclosed in braces and can be used to check the resulting type of an expression.
  • +
  • Checks are performed by the compiler, not at run time.
  • +
  • If covering usage of requires-expression with requires-clause, [Compile-time programming: requires clause] demonstrate requires requires and show how to ever avoid writing it by using a concept. [Compile-time programming: concepts]
  • +
+

7.5.2 Main: Advanced requirements

+

7.5.2.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Knowledge of noexcept
  • +
+

A student is able to:

+ +

7.5.2.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Write compound-requirements which test the noexceptness of an expression.
  2. +
  3. Use a concept as the target of a compound-requirement.
  4. +
+

7.5.2.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.5.2.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Compound-requirements allow the optional ability to test whether an expression is marked as noexcept, by using a trailing noexcept keyword.
  • +
+
struct S
+{
+    void foo() noexcept {}
+    void bar() {}
+};
+
+static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept
+static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept
+
    +
  • If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. { ++x } -> C<int> would substitute C<decltype((++x)), int> and check that concept C is satisfied for those parameters.
  • +
+

7.5.3 Advanced

+

7.6 Functions: default argument

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.6.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Functions in C++ may be overloaded with different numbers and types of parameters. It may be of value to specify default arguments for some number of parameters, to allow a caller to avoid specifying arguments that rarely change, or to enable expanding the set of parameters while maintaining backward compatibility with existing callers.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefine and use functions with default arguments
Main
Advancedrefinement of default arguments through multiple declarations
+

7.6.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Default arguments allow the omission of arguments with obvious or common values. Also may be utilized to extend an existing function signature without forcing changes to existing calling code.

+

7.6.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how default arguments work and how to define them.

+

7.6.4 Foundational: Using and defining functions with default arguments

+

7.6.4.1 Background/Required Knowledge

+

A student is able to:

+ +

7.6.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call to a function with a default argument with or without that argument specified
  2. +
  3. Declare a function with a default argument, and omit the default in the definition’s signature
  4. +
  5. Explain when the lifetime of a default argument begins and ends
  6. +
+

7.6.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • When no forward-declaration exists, the definition serves as the declaration
  • +
  • When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters.
  • +
  • Additional default values may be specified for other parameters in repeat declarations
  • +
  • Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments
  • +
+

7.6.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Default value may only be specified once for each parameter among all declarations
  • +
  • Default values must start from the rightmost parameter and continue leftward without gaps
  • +
  • Considerations of when to use default arguments vs overload set
  • +
+

7.6.5 Main: implementing *

+

7.6.5.1 Background/Required knowledge

+
    +
  • All of the above.
  • +
+

7.6.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+

7.6.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

7.6.5.4 Points to cover

+

This section lists important details for each point.

+

7.6.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

Subsequent redeclarations of the same function may add default argument values, which are then usable by callers. Though a single parameter cannot be given a default argument twice in the same translation unit, it is legal, though ill-advised, to give the same function different default arguments in different translation units.

+

7.7 Functions: user-defined literals (UDL)

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

7.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+

Literals are a way to write values in the code, such as strings and numbers. User-defined literals (UDL) allow to add a suffix to a string or number to change the meaning. The suffix selects a function (an operator) that can alter the value and type of the literal. The C++ library provides certain operators already and a user can add more by providing such operators.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalusing and understanding UDLs
Mainimplementing your own UDLs
AdvancedAdvanced use ("{}, {}!"_fmt("Hello", "World"))
+

7.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Allows clearer expression of intent in C++.
  • +
  • std::string: "Hello, world!"s
  • +
  • std::chrono: 3h + 10min + 5s
  • +
+

7.7.3 Topic introduction

+

Very brief introduction to the topic.

+
    +
  • Explain the existence of user defined literals. Example: 12min + 17s is terse, expressive and type safe.
  • +
+

7.7.4 Foundational: Using UDLs

+

7.7.4.1 Background/Required Knowledge

+

A student: * knows how to form numeric literals, e.g., 1.5f means a float of value 1.5. * is familiar with the major C++ types: * bool (Boolean type) * int (Integer type) * double (Floating-point type) * std::string (Text type) * std::vector (Collection type) * knows that namespaces exist, and namespace std. * knows what using-declarations and using-directives are. [C++ object model: declarations]

+

7.7.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. use using namespace std::string_literals[1].
  2. +
  3. recognise UDLs in code that they are reading.
  4. +
  5. figure out which UDL definitions for a used type exist.
  6. +
  7. identify parts of the standard library that make use of UDLs.
  8. +
  9. prevent the dangers of temporaries created with "blah"s as well as with std::string{"blah"}.
  10. +
  11. effectively selects the right set of namespaces in using-directives from the sub-namespaces std::literals.
  12. +
+

[1]: explain that it’s okay to use a using-directive to “activate” UDLs.

+

7.7.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • A student gets confused by the similarities and differences between built-in suffixes and UDLs and between UDLs from different namespaces.
  • +
  • A student “activates” two suffixes with the same signature from different namespaces.
  • +
+

7.7.4.4 Points to cover

+

This section lists important details for each point.

+

7.7.5 Main: implementing UDLs

+

7.7.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

7.7.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. write a UDL operator of their own.
  2. +
  3. separate unrelated UDLs into distinct namespaces.
  4. +
+

7.7.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present. #### Points to cover

+

This section lists important details for each point.

+

No caveats at present. ### Advanced {#udl-advanced}

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

8 Module name: Passing Parameters by Value

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

8.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ + + + + + + + + + + + + + + + + +
+Level + +Objectives +
+Foundational + +Defining and calling functions with values +
+Main + +
+Advanced + +
+

8.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

The fundamental element for code-reuse is a function. For functions to be useful, we need to parameterize them. Understanding how to do such is thus fundamental to programming in any language.

+

8.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain how to define functions with parameters and call them with values.

+

8.4 Foundational: Using reference types to avoid copies

+

8.4.1 Background/Required Knowledge

+

A student is able to:

+
    +
  • Explain what a function is
  • +
+

8.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Call a function with any number of parameters using the same number of arguments
  2. +
  3. Define a function with any number of parameters
  4. +
+

8.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

8.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • A function is called by invoking the name of the function, followed by parentheses
  • +
  • For each parameter in the function signature, a value must be provided, and in the same order
  • +
  • Multiple values passed to a function are comma-separated
  • +
  • When defining a function, you must list the parameters with the type first, and parameter name second
  • +
+

8.5 Main: Using references to modify external data

+

8.5.1 Background/Required Knowledge

+

8.5.2 Student outcomes

+

8.5.3 Caveats

+

8.5.4 Points to cover

+

8.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9 Module name: Passing Parameters by Reference

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ + + + + + + + + + + + + + + + + +
+Level + +Objectives +
+Foundational + +Avoiding copies using const-reference modifiers +
+Main + +Using references to modify external data +
+Advanced + +
+

9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

9.3 Topic introduction

+

Very brief introduction to the topic.

+

Explain what a reference type is and how it constrasts with a value type.

+

9.4 Foundational: Using reference types to avoid copies

+

9.4.1 Background/Required Knowledge

+

A student is able to:

+
    +
  • Define and call a function with parameters
  • +
+

9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. Use const-refernce types for function arguments
  2. +
  3. Explain what considerations to take when deciding whether or not to use a const-reference type
  4. +
+

9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • No copy of the data is made when taken by constant reference
  • +
  • A constant reference value cannot be modified
  • +
  • The lifetime of a constant reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use.
  • +
  • Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance.
  • +
+

9.5 Main: Using references to modify external data

+

9.5.1 Background/Required Knowledge

+
    +
  • All of the above
  • +
+

9.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. Define and utilize a non-const reference for passing values out of a function
  2. +
+

9.5.3 Caveats

+

9.5.4 Points to cover

+
    +
  • If the function does not intend to modify the value, const-references should be preferred
  • +
  • A reference value may be modified
  • +
  • The lifetime of a reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use.
  • +
  • Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance.
  • +
+

9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

9.7 Module name: Build systems

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.7.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
Foundational— Knowledge about build systems
Main— Usage of build system to compile a executable
Advanced— Add external libraries as a dependencies
+

9.7.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Building complex C++ projects by hand is tricky
  • +
  • Build systems can help to resolve dependencies
  • +
  • Build systems can help do distribute C++ code and help other to compile the code
  • +
  • Build systems can help to find and include libraries as dependencies
  • +
  • Build systems faciliate project management
  • +
  • All major C++ projects are distributed with build systems
  • +
+

9.7.3 Topic introduction

+

Very brief introduction to the topic.

+

Build systems are used to configure, build, and install complex C++ projects.

+

9.7.4 Foundational: Knowledge about build systems

+

9.7.4.1 Background/Required Knowledge

+

A student: * Should know how to compile and link C++ programs

+

9.7.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. To explain what a build system is
  2. +
  3. To explain that a build systems resolves dependencies
  4. +
  5. To explain that a build system supports compilation for different operating systems and architectures
  6. +
+

9.7.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

None

+

9.7.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Mention that many build systems are available for C++
  • +
  • Mention benefits and challenges
  • +
  • Build system help to only compile the C++ files with code changes and not the complete project
  • +
+

9.7.5 Main: Usage of build system to compile a executable

+

9.7.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
+

9.7.5.2 Student outcomes

+

A student should be able to:

+
    +
  1. Download a C++ package and build the package
  2. +
  3. Write a configuration file to compile a C++ executable
  4. +
  5. Pass compiler options via the build system
  6. +
  7. Use the build system to generate the executable
  8. +
  9. Write a configuration file to compile a library and link the library to a C++ executable
  10. +
+

9.7.5.3 Caveats

+

The instructions are restricted to the chosen build system and not easily transferable.

+

9.7.5.4 Points to cover

+
    +
  • Include paths to header files to the configuration
  • +
  • Adding compiler flags
  • +
  • How to build Release and Debug builds
  • +
  • Linking external libraries to the C++ project
  • +
  • Support compilation on different operating systems, compilers, and architectures
  • +
+

9.7.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • How to build libraries
  • +
  • How to have external libraries be downloaded during the build process
  • +
  • Mention that build systems provide support for unit testing
  • +
+

See user-defined-literals.

+

9.8 C++ object model: Definitions

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.8.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDefining variables and ODR
MainDefining for programs
AdvancedSpecial cases and peculiarities
+

9.8.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • A definition is a declaration that supplies all that is needed for a complete entity
  • +
  • int baz = 42;
  • +
  • void bar() { /* implementation */ }
  • +
  • class Foo { /* class body */ };
  • +
+

9.8.3 Topic introduction

+

Very brief introduction to the topic.

+

A definition extends a declaration, providing all that is needed for a complete entity, e.g., allocate memory for variables, provide the implementation for functions, complete definitions of data and function members of a class.

+

9.8.4 Foundational: Defining variables and ODR

+

9.8.4.1 Background/Required Knowledge

+

A student:

+ +

9.8.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. define a variable with a specific type int baz = 42;
  2. +
  3. define a function void bar() {}
  4. +
  5. define a class class Foo {};
  6. +
  7. explain the one definition rule
  8. +
+

9.8.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

9.8.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • One definition rule (ODR)
  • +
+

9.8.5 Main: Defining for programs

+

9.8.5.1 Background/Required Knowledge

+ +

9.8.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. organize variables, functions, classes into multiple translation units, describing interface with declarations and providing the implementations with definitions without violating ODR.
  2. +
  3. distinguish between template declaration and definition
  4. +
+

9.8.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Putting a definition into a header file that is included more than once leads to ODR violations, possibly resulting in linker errors.
  • +
+

9.8.5.4 Points to cover

+

This section lists important details for each point.

+

9.8.6 Advanced: Special cases and peculiarities

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • ABI Incompatibilities: Different definitions of the same type in multiple object files can lead to subtle program errors.
  • +
+

9.9 C++ object model: copy semantics

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.9.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjectives
Foundationalunderstanding how and when are copies made
Mainimplementing user-defined copy operations
Advancedspecial cases: copy elision
+

9.9.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+

Copy semantics allows the user to define how objects of a class get replicated and interact on a value level.

+

9.9.3 Topic introduction

+

Very brief introduction to the topic.

+

Explains when and how objects are copied.

+

9.9.4 Foundational: How and when are copies made

+

9.9.4.1 Background/Required Knowledge

+

A student is able to: * explain what a C++ type is? [C++ object model: types] * explain what an object is? [C++ object model: objects], [C++ object model: constant objects] * define and understand class invariants?

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain special member functions [C++ object model: special member functions]

+

9.9.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. explain what copy semantics accomplish
  2. +
+
    +
  • establishing “equivalent” object state in another object
  • +
+
    +
  1. explain difference between copying a reference and copying a value*
  2. +
  3. explain where copies are made
  4. +
+

* In other languages these differences are sometimes referred to as shallow and deep copy.

+

9.9.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Compiler-provided copy operations may result in ownership problems (e.g., char*). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., std::string instead of char* to hold string values.
  • +
+

9.9.4.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Principle of copying +
      +
    • Copying of types, which follow the rule of zero
    • +
    • Copying of types, with user defined copy operations
    • +
    • Copying an object does not change the original
    • +
  • +
  • Practical applications +
      +
    • std::unique_ptr (has no copy)
    • +
    • Strings (copies the value)
    • +
  • +
+

9.9.5 Main: Implementing user-defined copy operations

+

9.9.5.1 Background/Required Knowledge

+

A student is able to: * identify special member functions [C++ object model: special member functions]

+

It helps when a student is able to: * use move semantics [C++ object model: move semantics] * explain the rule of zero [C++ object model: rule-of-zero] * explain the rule of five [C++ object model: rule-of-five]

+

9.9.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to: * explain when they have to implement the copy operations for their own type * Copy constructor * Copy assignment operator * implement copy operations for their own types * Optional: explain when copying with basic and strong exception guarantees is useful

+

9.9.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Intricacies when implementing copy operations: +
      +
    • Examples of how not to write copy operations (e.g., C++03 std::auto_ptr)
    • +
  • +
+

9.9.5.4 Points to cover

+

This section lists important details for each point.

+
    +
  • Copy constructors and copy assignment operators +
      +
    • How compiler generates default copy operations
    • +
    • =default, =delete (No copy)
    • +
    • How-to write your own copy operations
    • +
    • Rule-of-five
    • +
    • Copy assignment operators can be ref-qualified to avoid assigning into temporary objects.
    • +
  • +
+

9.9.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+

When can copies be elided and when does the standard guarantee copy elision. References: * Abseil tip of the Week #166 * cppreference - Copy elision

+

9.10 C++ object model: Declarations

+

Skeleton descriptions are typeset in italic text, so please don’t remove these descriptions when editing the topic.

+

9.10.1 Overview

+

Provides a short natural language abstract of the module’s contents. Specifies the different levels of teaching.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
LevelObjective
FoundationalDeclaring variables
MainDeclaring for programs
AdvancedSpecial cases and peculiarities
+

9.10.2 Motivation

+

Why is this important? Why do we want to learn/teach this topic?

+
    +
  • Introduces a name and it’s type
  • +
  • int baz;
  • +
  • void bar();
  • +
  • class Foo;
  • +
+

9.10.3 Topic introduction

+

Very brief introduction to the topic.

+

Introduce names and their associated type in a scope.

+

9.10.4 Foundational: Declaring variables

+

9.10.4.1 Background/Required Knowledge

+

A student:

+
    +
  • is familiar with the basic C++ types: +
      +
    • bool (Boolean type)
    • +
    • int (Integer type)
    • +
    • double (Floating-point type)
    • +
  • +
+

9.10.4.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. declare a variable with a specific type ‘int baz;’
  2. +
  3. declare a function ‘void bar();’
  4. +
  5. declare a class ‘class Foo;’
  6. +
  7. forward declare a user-defined type or a function
  8. +
  9. explain the difference between a definition and a declaration
  10. +
+

9.10.4.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+

No caveats at present.

+

9.10.4.4 Points to cover

+

This section lists important details for each point.

+

9.10.5 Main: Declarations for programs

+

9.10.5.1 Background/Required Knowledge

+
    +
  • All of the above.
  • +
  • Basic template syntax
  • +
+

9.10.5.2 Student outcomes

+

A list of things “a student should be able to” after the curriculum. The next word should be an action word and testable in an exam. Max 5 items.

+

A student should be able to:

+
    +
  1. create header and source files with a declaration in the former and definition of a variable/function in the latter
  2. +
  3. declare type aliases to introduce a type with an alternative name ‘using std::string;’
  4. +
  5. write a forward template declaration
  6. +
+

9.10.5.3 Caveats

+

This section mentions subtle points to understand, like anything resulting in implementation-defined, unspecified, or undefined behavior.

+
    +
  • Declaring aliases can introduce name clashes
  • +
  • Prefer using declaration’s over using directives in header files [link]
  • +
  • The order of declarations dictates the order of initialization
  • +
+

9.10.5.4 Points to cover

+

This section lists important details for each point.

+

9.10.6 Advanced

+

These are important topics that are not expected to be covered but provide guidance where one can continue to investigate this topic in more depth.

+
    +
  • asm declaration
  • +
  • using-enum-declaration
  • +
  • extern “C” declarations
  • +
+

See concepts.

+

10 License

+

[NOTE: This license is copied verbatim from the C++ Core Guidelines.]

+
Copyright (c) Standard C++ Foundation and its contributors
+
+Standard C++ Foundation grants you a worldwide, nonexclusive, royalty-free,
+perpetual license to copy, use, modify, and create derivative works from this
+project for your personal or internal business use only. The above copyright
+notice and this permission notice shall be included in all copies or
+substantial portions of the project. This license does not grant permission
+to use the trade names, trademarks, service marks, or product names of the
+licensor, except as required for reasonable and customary use in describing
+the origin of the project.
+
+Standard C++ Foundation reserves the right to accept contributions to the
+project at its discretion.
+
+By contributing material to this project, you grant Standard C++ Foundation,
+and those who receive the material directly or indirectly from Standard C++
+Foundation, a perpetual, worldwide, non-exclusive, royalty-free, irrevocable,
+transferrable license to reproduce, prepare derivative works of, publicly
+display, publicly perform, and distribute your contributed material and such
+derivative works, and to sublicense any or all of the foregoing rights to third
+parties for commercial or non-commercial use.  You also grant Standard C++
+Foundation, and those who receive the material directly or indirectly from
+Standard C++ Foundation, a perpetual, worldwide, non-exclusive, royalty-free,
+irrevocable license under your patent claims that directly read on your
+contributed material to make, have made, use, offer to sell, sell and import
+or otherwise dispose of the material. You warrant that your material is your
+original work, or that you have the right to grant the above licenses.
+
+THE PROJECT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE PROJECT OR THE USE OR OTHER DEALINGS IN THE
+PROJECT.
+
+If you believe that anything in the project infringes your copyright, please
+contact us at admin@isocpp.org with your contact information and a detailed
+description of your intellectual property, including a specific URL where you
+believe your intellectual property is being infringed.
+
+

11 Contributors

+
Christopher Di Bella
+Florian Sattler
+Frank Birbacher
+Michael Adams
+Patrick Diehl
+rwdougla
+

12 How To Contribute

+

Before attempting to contribute any content for consideration for inclusion in this document, please read the information below and and the referenced documents as appropriate.

+

All contributions to this project must be made in accordance with the license in section License. This teaching-guidelines document only offers guidance on teaching C++ as it is specified in the current version of the C++ standard. So, content should be presented relative to the most-recently ratified version of the standard. A detailed explanation of how to present the material for a topic is given in:

+
    +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.
  • +
+

Any potential contributors should ensure that they read this document. The following document may also be helpful in providing some general background on the modular approach to teaching followed herein:

+ +

In order to prepare content, it is important to understand what learning outcomes are, and how to prepare good ones. Some information on learning outcomes can be found in the References section. The following document offers a concise introduction to learning outcomes:

+ +

13 Glossary

+

Some possible terms to include in the glossary:

+
    +
  • learning objective
  • +
  • learning outcome
  • +
+

14 References

+

14.1 References on Learning Outcomes

+ + +
    +
  • Christopher Di Bella, Simon Brand, and Michael Adams. P1389R0 — Standing Document for SG20: Guidelines for Teaching C++ to Beginners. https://wg21.link/p1389.

  • +
  • Christopher Di Bella. P1725R0 — Modular Topic Design. https://wg21.link/p1725.

  • +
  • JC van Winkel, Bjarne Stroustrup, and Florian Sattler. P2193 — How to structure a teaching topic. https://wg21.link/p2193.

  • +
  • JC van Winkel and Christopher Di Bella. P1231 — Proposal for Study Group: C++ Education. https://wg21.link/p1231.

  • +
  • H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. P2000 — Direction for ISO C++, Section 5.1. https://wg21.link/p2000r0.

  • +
+
+
+ + +
+ + diff --git a/skeleton.md b/skeleton.md deleted file mode 100644 index 2cc384e7..00000000 --- a/skeleton.md +++ /dev/null @@ -1,84 +0,0 @@ -## Module name: topic name - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational --- - -Main --- - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -### Topic introduction - -_Very brief introduction to the topic._ - -### Foundational: Using * - -#### Background/Required Knowledge - -A student: - - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. -2. -3. -4. -5. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -### Main: implementing * - -#### Background/Required Knowledge - -* All of the above. - -#### Student outcomes - -A student should be able to: - -1. -2. -3. -4. -5. - -#### Caveats - -#### Points to cover - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ diff --git a/sources/Makefile b/sources/Makefile deleted file mode 100644 index 94c3deff..00000000 --- a/sources/Makefile +++ /dev/null @@ -1,191 +0,0 @@ -#TOP_DIR = $(realpath ..) -TOP_DIR = .. - -# Specify the document version. -# This can be overridden when invoked from the automated build process. -DOC_VERSION = X.Y.Z - -# Specify whether a spelling error is an error (as opposed to a warning). -# This can be overridden when invoked from the automated build process. -# Please resist the temptation to set this variable to zero. ;-) -# DOC_SPELLCHECK_MUST_PASS = 0 -DOC_SPELLCHECK_MUST_PASS = 1 - -# This can be overridden when invoked from the automated build process. -INSTALL_DIR = $(TOP_DIR)/install - -# All of the Markdown source files (that are not generated during build). -SOURCES = $(shell find . -mindepth 2 -name '*.md') - -# Special top-level markdown files -EXTRA_SOURCES = glossary.md \ - contributing.md \ - introduction.md \ - main_raw.md \ - obtaining_document.md \ - references.md \ - -# The Markdown files that are generated during the build process. -GENERATED_MARKDOWN = \ - knowledge_areas_summary.md \ - main.pre.md \ - main.gen.md \ - contributors.md \ - -# Merge extra sources with detected sources for teaching modules -SOURCES += $(EXTRA_SOURCES) - -################################################################################ -# Define primary targets. -################################################################################ - -# The all target builds the document in a minimal set of formats and -# performs a spell check. -.PHONY: all -all: documents spellcheck - -# The world target is similar to the all target except that it builds the -# document in some additional formats. -.PHONY: world -world: all documents_extra - -# The documents target builds the document in a minimal set of formats. -.PHONY: documents -documents: guidelines.html guidelines_html guidelines.epub - -# The documents_extra target builds the document in a few extra formats. -.PHONY: world -documents_extra: guidelines.pdf - -# The spellcheck format performs a spell check on the document. -.PHONY: spellcheck -spellcheck: spellcheck_result.txt - -# The clean target removes all files generated during the build process. -.PHONY: clean -clean: - rm -f $(GENERATED_MARKDOWN) - rm -f guidelines.html guidelines.pdf guidelines.epub guidelines.tex - rm -rf guidelines.texi - rm -rf guidelines_html - rm -f spellcheck_result.txt - rm -f spellcheck_expected_sorted.txt - rm -f missfont.log - -# The install target installs the build document (in various formats) -# in the directory $(INSTALL_DIR). -.PHONY: install -install: all - if [ ! -d "$(INSTALL_DIR)" ]; then \ - mkdir -p "$(INSTALL_DIR)" || exit 1; \ - fi - for dir in html html/images; do \ - if [ ! -d "$(INSTALL_DIR)/$$dir" ]; then \ - mkdir -p "$(INSTALL_DIR)/$$dir" || exit 1; \ - fi; \ - done - cp -f images/cpp_logo.png "$(INSTALL_DIR)/html/images" - cp -f guidelines.html "$(INSTALL_DIR)/html/index.html" - cp -r -f guidelines_html "$(INSTALL_DIR)/html_split" - cp -f guidelines.epub "$(INSTALL_DIR)" - if [ -f guidelines.pdf ]; then \ - cp -f guidelines.pdf "$(INSTALL_DIR)"; \ - fi - -################################################################################ -# Some additional configuration. -################################################################################ - -MAIN_GENERATOR= $(TOP_DIR)/tools/build/generate_main.py -MD_PREPROCESSOR = $(TOP_DIR)/tools/build/preprocessor -MAKE_MARKDOWN = $(TOP_DIR)/tools/build/make_markdown -SPELLCHECK_DIR = $(TOP_DIR)/config/spellcheck - -################################################################################ -# Preprocessing setup. -################################################################################ - -main.pre.md: $(SOURCES) contributors.md main_raw.md - $(MAIN_GENERATOR) --raw main_raw.md --out main.pre.md --module-folder modules - -main.gen.md: $(SOURCES) contributors.md main.pre.md - $(MD_PREPROCESSOR) -v $(DOC_VERSION) < main.pre.md > main.gen.md - -knowledge_areas_summary.md: $(SOURCES) knowledge_areas.dat - $(MAKE_MARKDOWN) < knowledge_areas.dat > knowledge_areas_summary.md - -contributors.md: - git log --format="%aN%n%(trailers:key=Co-authored-by,valueonly=true)" | sed 's/ <.*>//g' | sort | uniq > contributors.md - -################################################################################ -# Establish Pandoc settings. -################################################################################ - -PANDOC_OPTIONS += --verbose -PANDOC_OPTIONS += --toc --toc-depth 3 -PANDOC_OPTIONS += --number-sections -PANDOC_OPTIONS += --standalone -PANDOC_OPTIONS += --pdf-engine=xelatex -#PANDOC_OPTIONS += --lua-filter=tools/pandoc_filters/meta_vars.lua -#PANDOC_OPTIONS += --metadata date="`date +%Y-%m-%d`" -PANDOC_OPTIONS += --metadata version=$(DOC_VERSION) - -INPUT_FORMAT = markdown+header_attributes+multiline_tables - -EPUB_CSS_FILE = css/default-pandoc.css - -#HTML_TEMPLATE = templates/bootstrap_menu.html -HTML_TEMPLATE = $(TOP_DIR)/config/pandoc_templates/uikit.html - -#MAKEINFO_OPTIONS += --no-warn -MAKEINFO_OPTIONS += --error-limit 1000000000000 -#MAKEINFO_OPTIONS += --verbose -MAKEINFO_OPTIONS += --no-validate -MAKEINFO_OPTIONS += --force - -################################################################################ -# Rules for generating the document in various formats. -################################################################################ - -guidelines.html: $(GENERATED_MARKDOWN) - pandoc $(PANDOC_OPTIONS) --template $(HTML_TEMPLATE) --from $(INPUT_FORMAT) -o $@ main.gen.md - -guidelines.epub: $(GENERATED_MARKDOWN) - pandoc $(PANDOC_OPTIONS) -c $(EPUB_CSS_FILE) --from $(INPUT_FORMAT) -o $@ main.gen.md - -guidelines.pdf: $(GENERATED_MARKDOWN) - pandoc $(PANDOC_OPTIONS) --from $(INPUT_FORMAT) -o $@ main.gen.md - -guidelines.texi: $(GENERATED_MARKDOWN) - pandoc $(PANDOC_OPTIONS) --from $(INPUT_FORMAT) -o $@ main.gen.md - -guidelines.docbook: $(GENERATED_MARKDOWN) - pandoc $(PANDOC_OPTIONS) --from $(INPUT_FORMAT) -o $@ main.gen.md - -guidelines_html: guidelines.texi - makeinfo $(MAKEINFO_OPTIONS) --html -o guidelines_html guidelines.texi - -guidelines.tex: - pandoc $(PANDOC_OPTIONS) --from $(INPUT_FORMAT) --to latex -o $@ main.gen.md - -################################################################################ -# Rule for spellchecking. -################################################################################ - -spellcheck_result.txt: guidelines.html - rm -f $@ - PATH="$(TOP_DIR)/tools/build:$$PATH" pandoc --from $(INPUT_FORMAT) \ - --lua-filter $(TOP_DIR)/tools/pandoc_filters/spellcheck.lua \ - main.gen.md | sort | uniq > $@ - if [ -s $@ ]; then \ - echo "DETECTED SPELLING ERRORS:"; \ - cat $@ | while read line; do echo "Misspelled '$$line' in:"; \ - grep -R "$$line" -n --color=auto --include='*.md' --exclude='main.gen.md'; done; \ - sync; \ - if [ $(DOC_SPELLCHECK_MUST_PASS) -ne 0 ]; then \ - echo "ERROR: spelling errors detected, cannot proceed!"; \ - exit 1; \ - else \ - echo "WARNING: spelling errors detected"; \ - fi; \ - fi diff --git a/sources/contributing.md b/sources/contributing.md deleted file mode 100644 index 9f66514a..00000000 --- a/sources/contributing.md +++ /dev/null @@ -1,38 +0,0 @@ -# How To Contribute {#contributing} - -Before attempting to contribute any content for consideration for -inclusion in this document, please read the information below and -and the referenced documents as appropriate. - -All contributions to this project must be made in accordance with the -license in section [License](#license). -This teaching-guidelines document only offers guidance on teaching C++ -as it is specified in the current version of the C++ standard. -So, content should be presented relative to the most-recently -ratified version of the standard. -A detailed explanation of how to present the material for a topic is given in: - -- JC van Winkel, Bjarne Stroustrup, and Florian Sattler. - P2193 --- - How to structure a teaching topic. - . - -Any potential contributors should ensure that they read this document. -The following document may also be helpful in providing some general -background on the modular approach to teaching followed herein: - -- Christopher Di Bella. - P1725R0 --- - Modular Topic Design. - . - -In order to prepare content, it is important to understand what learning -outcomes are, and how to prepare good ones. -Some information on learning outcomes can be found in the -[References](#references) section. -The following document offers a concise introduction to learning outcomes: - -- Effective Use of Performance Objectives for Learning and Assessment - (For Use With Fink’s and Bloom’s Taxonomies), - University of New Mexico, School of Medicine, Teaching and Educational Development, - . diff --git a/sources/css/default-pandoc.css b/sources/css/default-pandoc.css deleted file mode 100644 index 9703d639..00000000 --- a/sources/css/default-pandoc.css +++ /dev/null @@ -1,327 +0,0 @@ -html { - font-size: 100%; - overflow-y: scroll; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - color: #444; - font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; - font-size: 12px; - line-height: 1.7; - padding: 1em; - margin: auto; -/* - max-width: 42em; -*/ - max-width: 50em; - background: #fefefe; -} - -a { - color: #0645ad; - text-decoration: none; -} - -a:visited { - color: #0b0080; -} - -a:hover { - color: #06e; -} - -a:active { - color: #faa700; -} - -a:focus { - outline: thin dotted; -} - -*::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -*::selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -a::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -a::selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -p { - margin: 1em 0; -} - -img { - max-width: 100%; -} - -h1, h2, h3, h4, h5, h6 { - color: #111; - line-height: 125%; - margin-top: 2em; - font-weight: normal; -} - -h4, h5, h6 { - font-weight: bold; -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; -} - -h3 { - font-size: 1.5em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1em; -} - -h6 { - font-size: 0.9em; -} - -blockquote { - color: #666666; - margin: 0; - padding-left: 3em; - border-left: 0.5em #EEE solid; -} - -hr { - display: block; - height: 2px; - border: 0; - border-top: 1px solid #aaa; - border-bottom: 1px solid #eee; - margin: 1em 0; - padding: 0; -} - -pre, code, kbd, samp { - color: #000; - font-family: monospace, monospace; - _font-family: 'courier new', monospace; - font-size: 0.98em; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -b, strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -ins { - background: #ff9; - color: #000; - text-decoration: none; -} - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold; -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -ul, ol { - margin: 1em 0; - padding: 0 0 0 2em; -} - -li p:last-child { - margin-bottom: 0; -} - -ul ul, ol ol { - margin: .3em 0; -} - -dl { - margin-bottom: 1em; -} - -dt { - font-weight: bold; - margin-bottom: .8em; -} - -dd { - margin: 0 0 .8em 2em; -} - -dd:last-child { - margin-bottom: 0; -} - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} - -figure { - display: block; - text-align: center; - margin: 1em 0; -} - -figure img { - border: none; - margin: 0 auto; -} - -figcaption { - font-size: 0.8em; - font-style: italic; - margin: 0 0 .8em; -} - -table { - margin-bottom: 2em; - border-bottom: 1px solid #ddd; - border-right: 1px solid #ddd; - border-spacing: 0; - border-collapse: collapse; -} - -table th { - padding: .2em 1em; - background-color: #eee; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; -} - -table td { - padding: .2em 1em; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; - vertical-align: top; -} - -.author { - font-size: 1.2em; - text-align: center; -} - -@media only screen and (min-width: 480px) { - body { - font-size: 14px; - } -} -@media only screen and (min-width: 768px) { - body { - font-size: 16px; - } -} -@media print { - * { - background: transparent !important; - color: black !important; - filter: none !important; - -ms-filter: none !important; - } - - body { - font-size: 12pt; - max-width: 100%; - } - - a, a:visited { - text-decoration: underline; - } - - hr { - height: 1px; - border: 0; - border-bottom: 1px solid black; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; - } - - pre, blockquote { - border: 1px solid #999; - padding-right: 1em; - page-break-inside: avoid; - } - - tr, img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page :left { - margin: 15mm 20mm 15mm 10mm; -} - - @page :right { - margin: 15mm 10mm 15mm 20mm; -} - - p, h2, h3 { - orphans: 3; - widows: 3; - } - - h2, h3 { - page-break-after: avoid; - } -} diff --git a/sources/css/elegant_bootstrap.css b/sources/css/elegant_bootstrap.css deleted file mode 100644 index d62d6df0..00000000 --- a/sources/css/elegant_bootstrap.css +++ /dev/null @@ -1,329 +0,0 @@ -/* - * I add this to html files generated with pandoc. - */ - -html { - font-size: 100%; - overflow-y: scroll; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - color: #444; - font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; - font-size: 12px; - line-height: 1.8; - background: #fefefe; -} - -a { - color: #0645ad; - text-decoration: none; -} - -a:visited { - color: #0b0080; -} - -a:hover { - color: #06e; -} - -a:active { - color: #faa700; -} - -a:focus { - outline: thin dotted; -} - -*::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -*::selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -a::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -a::selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -p { - margin: 1em 0; -} - -img { - max-width: 100%; -} - -h1, h2, h3, h4, h5, h6 { - color: #111; - line-height: 125%; - /* margin-top: 2em; */ - font-weight: normal; -} - -h4, h5, h6 { - font-weight: bold; -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; -} - -h3 { - font-size: 1.5em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1em; -} - -h6 { - font-size: 0.9em; -} - -blockquote { - color: #666666; - margin: 0; - padding-left: 3em; - border-left: 0.5em #EEE solid; -} - -hr { - display: block; - height: 2px; - border: 0; - border-top: 1px solid #aaa; - border-bottom: 1px solid #eee; - margin: 1em 0; - padding: 0; -} - -pre, code, kbd, samp { - color: #000; - font-family: monospace, monospace; - _font-family: 'courier new', monospace; - font-size: 0.98em; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -b, strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -ins { - background: #ff9; - color: #000; - text-decoration: none; -} - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold; -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -ul, ol { - margin: 1em 0; - padding: 0 0 0 2em; -} - -li { - line-height: inherit; -} - -li p:last-child { - margin-bottom: 0; -} - -ul ul, ol ol { - margin: .3em 0; -} - -dl { - margin-bottom: 1em; -} - -dt { - font-weight: bold; - margin-bottom: .8em; -} - -dd { - margin: 0 0 .8em 2em; -} - -dd:last-child { - margin-bottom: 0; -} - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} - -figure { - display: block; - text-align: center; - margin: 1em 0; -} - -figure img { - border: none; - margin: 0 auto; -} - -figcaption { - font-size: 0.8em; - font-style: italic; - margin: 0 0 .8em; -} - -table { - margin-bottom: 2em; - border-bottom: 1px solid #ddd; - border-right: 1px solid #ddd; - border-spacing: 0; - border-collapse: collapse; -} - -table th { - padding: .2em 1em; - background-color: #eee; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; -} - -table td { - padding: .2em 1em; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; - vertical-align: top; -} - -.author { - font-size: 1.2em; - text-align: center; -} - -@media only screen and (min-width: 480px) { - body { - font-size: 14px; - } -} -@media only screen and (min-width: 768px) { - body { - font-size: 16px; - } -} -@media print { - * { - background: transparent !important; - color: black !important; - filter: none !important; - -ms-filter: none !important; - } - - body { - font-size: 12pt; - max-width: 100%; - } - - a, a:visited { - text-decoration: underline; - } - - hr { - height: 1px; - border: 0; - border-bottom: 1px solid black; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; - } - - pre, blockquote { - border: 1px solid #999; - padding-right: 1em; - page-break-inside: avoid; - } - - tr, img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page :left { - margin: 15mm 20mm 15mm 10mm; -} - - @page :right { - margin: 15mm 10mm 15mm 20mm; -} - - p, h2, h3 { - orphans: 3; - widows: 3; - } - - h2, h3 { - page-break-after: avoid; - } -} diff --git a/sources/css/epub.css b/sources/css/epub.css deleted file mode 100644 index d07c53f3..00000000 --- a/sources/css/epub.css +++ /dev/null @@ -1,1540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - learnbyexample.github.io/epub.css at master · learnbyexample/learnbyexample.github.io · GitHub - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
- - - -
- - - - - - - - - -
-
-
- - - - - - - - - - - - - -
-
- - - - -
- - - - Permalink - - - -
- -
-
- - - master - - - - -
-
-
- Switch branches/tags - -
- - - -
- -
- -
- - -
- -
- - - - - - - - - - - - - - -
- - -
-
-
-
- -
- -
- - - - Go to file - - -
- - -
-
-
- - - -
- -
-
-
 
-
- -
-
 
- Cannot retrieve contributors at this time -
-
- - - - - - - - -
- - -
-
- - 108 lines (93 sloc) - - 2.15 KB -
- -
- -
- Raw - Blame -
- - -
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/* This defines styles and classes used in the book */
/* body { margin: 5%; text-align: justify; font-size: medium; }
code { font-family: monospace; }
h1 { text-align: left; }
h2 { text-align: left; }
h3 { text-align: left; } */
h4 { text-align: left; }
h5 { text-align: left; }
h6 { text-align: left; }
h1.title { }
h2.author { }
h3.date { }
nav#toc ol,
nav#landmarks ol { padding: 0; margin-left: 1em; }
nav#toc ol li,
nav#landmarks ol li { list-style-type: none; margin: 0; padding: 0; }
a.footnote-ref { vertical-align: super; }
em, em em em, em em em em em { font-style: italic;}
em em, em em em em { font-style: normal; }
/* code{ white-space: pre-wrap; } */
span.smallcaps{ font-variant: small-caps; }
span.underline{ text-decoration: underline; }
q { quotes: "“" "”" "‘" "’"; }
div.column{ display: inline-block; vertical-align: top; width: 50%; }
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
-
body {
font-family: "DejaVu Serif", serif;
margin: 5% 5% 20% 5%;
text-align: justify;
font-size: 0.75em;
line-height: 1.5;
}
-
h1 {
text-align: left;
font-size: 2em;
}
-
h2 {
text-align: left;
}
-
h3 {
text-align: left;
}
-
h1.title {
text-align: center;
}
-
p.author {
text-align: center;
}
-
code {
font-family: "DejaVu Sans Mono", monospace;
background-color: #ebebeb;
font-size: 100%;
line-height: inherit;
white-space: pre-wrap;
}
-
pre {
font-family: "DejaVu Sans Mono", monospace;
padding: 1em;
overflow: auto;
font-size: 100%;
line-height: inherit;
border-radius: 0.25em;
background-color: #ebebeb;
white-space: pre-wrap;
}
-
table {
border-collapse: collapse;
font-size: 100%;
}
-
th, td {
padding: 0.8em;
}
-
table, th, td {
border: 0.06em solid black;
}
-
a {
text-decoration: none;
}
-
blockquote {
border-style: solid solid solid solid;
border-color: #a41434;
border-width: medium;
border-radius: 0.5em;
padding-left: 1em;
padding-right: 1em;
background-color: #fcecf4;
}
-
@media screen { /* Workaround for iBooks issue; see #6242 */
.sourceCode {
overflow: visible !important;
white-space: pre-wrap !important;
}
}
- - - -
- - -
- - - -
- - -
- - -
-
- - -
- - - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - diff --git a/sources/css/github-pandoc.css b/sources/css/github-pandoc.css deleted file mode 100644 index 0607023b..00000000 --- a/sources/css/github-pandoc.css +++ /dev/null @@ -1,424 +0,0 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ - -/* ========================================================================== - HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined in IE 8/9. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -/** - * Correct `inline-block` display not defined in IE 8/9. - */ - -audio, -canvas, -video { - display: inline-block; -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* ========================================================================== - Base - ========================================================================== */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background: transparent; -} - -/** - * Address `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* ========================================================================== - Typography - ========================================================================== */ - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari 5, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9, Safari 5, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari 5 and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Correct font family set oddly in Safari 5 and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -/** - * Improve readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre-wrap; -} - -/** - * Set consistent quote types. - */ - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* ========================================================================== - Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9. - */ - -img { - border: 0; -} - -/** - * Correct overflow displayed oddly in IE 9. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* ========================================================================== - Figures - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari 5. - */ - -figure { - margin: 0; -} - -/* ========================================================================== - Forms - ========================================================================== */ - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Correct font family not being inherited in all browsers. - * 2. Correct font size not being inherited in all browsers. - * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. - */ - -button, -input, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -button, -input { - line-height: normal; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. - * Correct `select` style inheritance in Firefox 4+ and Opera. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * 1. Remove default vertical scrollbar in IE 8/9. - * 2. Improve readability and alignment in all browsers. - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - -/* ========================================================================== - Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -.go-top { -position: fixed; -bottom: 2em; -right: 2em; -text-decoration: none; -background-color: #E0E0E0; -font-size: 12px; -padding: 1em; -display: inline; -} - -/* Github css */ - -html,body{ margin: auto; - padding-right: 1em; - padding-left: 1em; - max-width: 44em; color:black;}*:not('#mkdbuttons'){margin:0;padding:0}body{font:13.34px helvetica,arial,freesans,clean,sans-serif;-webkit-font-smoothing:subpixel-antialiased;line-height:1.4;padding:3px;background:#fff;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}p{margin:1em 0}a{color:#4183c4;text-decoration:none}body{background-color:#fff;padding:30px;margin:15px;font-size:14px;line-height:1.6}body>*:first-child{margin-top:0!important}body>*:last-child{margin-bottom:0!important}@media screen{body{box-shadow:0 0 0 1px #cacaca,0 0 0 4px #eee}}h1,h2,h3,h4,h5,h6{margin:20px 0 10px;padding:0;font-weight:bold;-webkit-font-smoothing:subpixel-antialiased;cursor:text}h1{font-size:28px;color:#000}h2{font-size:24px;border-bottom:1px solid #ccc;color:#000}h3{font-size:18px;color:#333}h4{font-size:16px;color:#333}h5{font-size:14px;color:#333}h6{color:#777;font-size:14px}p,blockquote,table,pre{margin:15px 0}ul{padding-left:30px}ol{padding-left:30px}ol li ul:first-of-type{margin-top:0}hr{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0;border:0 none;color:#ccc;height:4px;padding:0}body>h2:first-child{margin-top:0;padding-top:0}body>h1:first-child{margin-top:0;padding-top:0}body>h1:first-child+h2{margin-top:0;padding-top:0}body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child{margin-top:0;padding-top:0}a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6{margin-top:0;padding-top:0}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p,ul li>:first-child,ol li>:first-child{margin-top:0}dl{padding:0}dl dt{font-size:14px;font-weight:bold;font-style:italic;padding:0;margin:15px 0 5px}dl dt:first-child{padding:0}dl dt>:first-child{margin-top:0}dl dt>:last-child{margin-bottom:0}dl dd{margin:0 0 15px;padding:0 15px}dl dd>:first-child{margin-top:0}dl dd>:last-child{margin-bottom:0}blockquote{border-left:4px solid #DDD;padding:0 15px;color:#777}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}table{border-collapse:collapse;border-spacing:0;font-size:100%;font:inherit}table th{font-weight:bold;border:1px solid #ccc;padding:6px 13px}table td{border:1px solid #ccc;padding:6px 13px}table tr{border-top:1px solid #ccc;background-color:#fff}table tr:nth-child(2n){background-color:#f8f8f8}img{max-width:100%}code,tt{margin:0 2px;padding:0 5px;white-space:nowrap;border:1px solid #eaeaea;background-color:#f8f8f8;border-radius:3px;font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;color:#333}pre>code{margin:0;padding:0;white-space:pre;border:0;background:transparent}.highlight pre{background-color:#f8f8f8;border:1px solid #ccc;font-size:13px;line-height:19px;overflow:auto;padding:6px 10px;border-radius:3px}pre{background-color:#f8f8f8;border:1px solid #ccc;font-size:13px;line-height:19px;overflow:auto;padding:6px 10px;border-radius:3px}pre code,pre tt{background-color:transparent;border:0}.poetry pre{font-family:Georgia,Garamond,serif!important;font-style:italic;font-size:110%!important;line-height:1.6em;display:block;margin-left:1em}.poetry pre code{font-family:Georgia,Garamond,serif!important;word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto;white-space:pre-wrap}sup,sub,a.footnote{font-size:1.4ex;height:0;line-height:1;vertical-align:super;position:relative}sub{vertical-align:sub;top:-1px}@media print{body{background:#fff}img,pre,blockquote,table,figure{page-break-inside:avoid}body{background:#fff;border:0}code{background-color:#fff;color:#333!important;padding:0 .2em;border:1px solid #dedede}pre{background:#fff}pre code{background-color:white!important;overflow:visible}}@media screen{body.inverted{color:#eee!important;border-color:#555;box-shadow:none}.inverted body,.inverted hr .inverted p,.inverted td,.inverted li,.inverted h1,.inverted h2,.inverted h3,.inverted h4,.inverted h5,.inverted h6,.inverted th,.inverted .math,.inverted caption,.inverted dd,.inverted dt,.inverted blockquote{color:#eee!important;border-color:#555;box-shadow:none}.inverted td,.inverted th{background:#333}.inverted h2{border-color:#555}.inverted hr{border-color:#777;border-width:1px!important}::selection{background:rgba(157,193,200,0.5)}h1::selection{background-color:rgba(45,156,208,0.3)}h2::selection{background-color:rgba(90,182,224,0.3)}h3::selection,h4::selection,h5::selection,h6::selection,li::selection,ol::selection{background-color:rgba(133,201,232,0.3)}code::selection{background-color:rgba(0,0,0,0.7);color:#eee}code span::selection{background-color:rgba(0,0,0,0.7)!important;color:#eee!important}a::selection{background-color:rgba(255,230,102,0.2)}.inverted a::selection{background-color:rgba(255,230,102,0.6)}td::selection,th::selection,caption::selection{background-color:rgba(180,237,95,0.5)}.inverted{background:#0b2531;background:#252a2a}.inverted body{background:#252a2a}.inverted a{color:#acd1d5}}.highlight .c{color:#998;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .k,.highlight .o{font-weight:bold}.highlight .cm{color:#998;font-style:italic}.highlight .cp{color:#999;font-weight:bold}.highlight .c1{color:#998;font-style:italic}.highlight .cs{color:#999;font-weight:bold;font-style:italic}.highlight .gd{color:#000;background-color:#fdd}.highlight .gd .x{color:#000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000;background-color:#dfd}.highlight .gi .x{color:#000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gs{font-weight:bold}.highlight .gu{color:#800080;font-weight:bold}.highlight .gt{color:#a00}.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr{font-weight:bold}.highlight .kt{color:#458;font-weight:bold}.highlight .m{color:#099}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .nb{color:#0086b3}.highlight .nc{color:#458;font-weight:bold}.highlight .no{color:#008080}.highlight .ni{color:#800080}.highlight .ne,.highlight .nf{color:#900;font-weight:bold}.highlight .nn{color:#555}.highlight .nt{color:#000080}.highlight .nv{color:#008080}.highlight .ow{font-weight:bold}.highlight .w{color:#bbb}.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:#099}.highlight .sb,.highlight .sc,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc,.highlight .vg,.highlight .vi{color:#008080}.highlight .il{color:#099}.highlight .gc{color:#999;background-color:#eaf2f5}.type-csharp .highlight .k,.type-csharp .highlight .kt{color:#00F}.type-csharp .highlight .nf{color:#000;font-weight:normal}.type-csharp .highlight .nc{color:#2b91af}.type-csharp .highlight .nn{color:#000}.type-csharp .highlight .s,.type-csharp .highlight .sc{color:#a31515} diff --git a/sources/glossary.md b/sources/glossary.md deleted file mode 100644 index dc2fe304..00000000 --- a/sources/glossary.md +++ /dev/null @@ -1,6 +0,0 @@ -# Glossary - -Some possible terms to include in the glossary: - - - learning objective - - learning outcome diff --git a/sources/introduction.md b/sources/introduction.md deleted file mode 100644 index b910b252..00000000 --- a/sources/introduction.md +++ /dev/null @@ -1,86 +0,0 @@ -# Context and Aim of This Guide - -This document is intended to serve as a resource for instructors -to assist in the preparation of courses on C++ in a variety of -settings, including university, college, and industry environments. -The main objectives of this document are as follows: - - - to provide guidelines for content to be covered by courses of various - difficulty levels on C++ (e.g., topics and learning outcomes) - - to note some common misunderstandings and problematic points that may - be encountered when teaching particular topics - - to suggest resources useful for teaching C++ - - to present examples of curriculum for specific courses - -This document does not itself provide a curriculum for a single specific -course, but is rather a set of guidelines that can be used to prepare -curricula for a wide variety of courses that differ in focus and level -of sophistication. -(This said, however, some links to other documents with examples of -curricula for specific courses may be included herein.) -This document only intends to target the teaching of the -most recently ratified version of the C++ standard. -(This said, however, since older versions of this document are also -available, these older versions may be of some use to those who need -guidance in older versions of the standard, at least versions that -do not predate C++20.) - -# Use of This Document - -**[NOTE: This document follows the same license model as the C++ Core -Guidelines. The LICENSE document is taken verbatim from the C++ Core -Guidelines.]** -This document is made available under a MIT-style license. -In simple terms, this license permits copying, use, modification, -and creation of derivative works. -A copy of the license is included in the section [LICENSE](#license). - -# Contributing to This Document - -Contributions to this document are welcome. -If you would like to help with this project as a contributor, -please read the section [How to Contribute](#contributing). - -# Organization of This Document - -The various concepts (i.e., ideas) to potentially be covered -are partitioned into modules. -A module is very broad in scope and consists of numerous topics. - -For each module, topics related to the module are identified. -Then, for each topic, learning outcomes are specified. -In order to address a wide variety of courses on C++, each topic -is addressed at three proficiency levels. -These proficiency levels allow each topic to be covered at more than -one level of detail. -This allows target audiences with different background and learning -objectives to be accommodated. -The three proficiency levels are as follows: - - - foundational: This level gives the learner the idea that a - facility exists, what benefits it offers, and the basic ways of using it. - - - main: This level shows mainstream uses and techniques. - For abstraction and organizational mechanisms it also demonstrates how to - build them. - This level should also give the learner a basic (but not detailed) - understanding of how a - facility might be implemented so that the learner can have a first-order - understanding of any costs involved. - - - advanced: This level gives information suitable for an expert. - For most topics there is an expert level of knowledge that most - programmers rarely need and techniques that require detailed understanding - of language rules or library implementation. - -The remainder of this document is organized as follows. -The various topics are listed grouped by module. -In cases where a topic might be classified into more -than one module, the topic is listed under the module of most direct -relevance. -This is done in order to avoid duplication of content. -(In the case that a topic is equally relevant to multiple modules, -the decision of which to select is made by a proverbial coin toss.) -The order in which modules and topics are presented -is not meant to imply any order of coverage in a course. -The order in which items are listed is essentially arbitrary. diff --git a/sources/knowledge_areas.dat b/sources/knowledge_areas.dat deleted file mode 100644 index cb515b0a..00000000 --- a/sources/knowledge_areas.dat +++ /dev/null @@ -1,81 +0,0 @@ -CM Compilation Model - ? ? ? ? Translation Units - ? ? ? ? Headers - ? ? ? ? Modules - ? ? ? ? Name Mangling - ? ? ? ? Phases of Translation - ? ? ? ? Separate Compilation - ? ? ? ? Linkage -P Preprocessor - ? ? ? ? Preprocessor Metaprogramming - ? ? ? ? Inclusion - ? ? ? ? Macros -B Basics Types, Objects, Values, Expressions, Statements, and Control-Flow Constructs - ? ? ? ? Constant Objects - ? ? ? ? Declarations - def y y y Definitions - ? ? ? ? Selection Constructs (e.g., if, ternary) - ? ? ? ? Looping Constructs (e.g., for, while, etc.) -F Functions - ? ? ? ? Calling Functions - ? ? ? ? Parameter Passing (e.g., Passing By Value and Reference) - func-args y n n Default Arguments - ? ? ? ? Returning Multiple Values - ? ? ? ? Overloading - udl y y n User-Defined Literals -C User-Defined Types (Classes) - ? ? ? ? Special Member Functions - ? ? ? ? Types - ? ? ? ? Conversions - ? ? ? ? Constructors and Destructors - ? ? ? ? Move/Copy Constructors and Assignment Operators - ? ? ? ? Member Functions - ? ? ? ? Sum Types - ? ? ? ? User-Defined Literals - ? ? ? ? Special Member Functions - ? ? ? ? Guidelines for Special Member Functions (e.g., Rule of Five, Rule of Zero) - copy y y n Copy Semantics - ? ? ? ? Moving and Copying - ? ? ? ? Lambdas -I Inheritance and Class Hierarchies - ? ? ? ? Virtual Functions - ? ? ? ? Run-Time Type Information -CT Compile-Time Computation - ? ? ? ? Constant Expressions and Constant Evaluation - static-assert y y n `static_assert` -T Generic Programming (Templates) - ? ? ? ? Concepts - ? ? ? ? SFINAE - ? ? ? ? Template Metaprogramming - ? ? ? ? Function Templates - ? ? ? ? Requires Clauses - req-expr y y n Requires Expressions -EH Error Handling - coe y y n Categories of Errors - ? ? ? ? errno - ? ? ? ? Error Codes - eh y y y Exception Handling -PD Program Design - cont y y y Containers -DE Debugging Errors - compiletimeerr y y y Compile-Time Errors - runtimeerr y y y Run-time Errors -SL Standard Library - ? ? ? ? Input/Output (I/O) - ? ? ? ? Containers, Iterators, and Algorithms -EL External (i.e., Non Standard) Libraries - ? ? ? ? Graphical User Interfaces -BLD Building - ? ? ? ? Software Build Tools - ? ? ? ? Strategies for Handling Build Problems -TD Testing and Debugging - ? ? ? ? Source-Level Debuggers - ? ? ? ? Code Sanitizers - ? ? ? ? Test Frameworks - ? ? ? ? Debugging Strategies -TOOL Tooling - ? ? ? ? Compiler Toolchains - ? ? ? ? IDEs -SD Software Design - ? ? ? ? Design by Contract - diff --git a/sources/main_raw.md b/sources/main_raw.md deleted file mode 100644 index d847a5e6..00000000 --- a/sources/main_raw.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title_logo: images/cpp_logo.png -title: Guidelines for Teaching C++ -author: SG20 (ISO C++ Study Group on Education) -geometry: margin=1in -output: pdf_document ---- - -__INCLUDE__(obtaining_document.md) - -__INCLUDE__(introduction.md) - -# Summary of Modules and Topics - -In the sections that follow, the various modules and topics -are presented. -There is one section per module. -For each module, a table listing the various topics in that module -is provided. -The ID for a topic is linked to the detailed coverage of that -topic that comes later in the document. -If a topic has any learning outcomes at a given proficiency level, this is -indicated by a checkmark ("✔️"). -If a topic has no learning outcomes -(simply because there -are not any, not because the information is missing), -this is indicated by an em dash ("—"). -In the case that the information for a topic is completely -missing, a question mark ("?") symbol is used. - -__INCLUDE__(knowledge_areas_summary.md) - -# Detailed Information for Modules and Topics - -[//]: # ( ********** START OF DETAILED TOPIC DOCUMENTS ********** ) - -INJECT_TEACHING_MODULES_HERE - -[//]: # ( ********** END OF DETAILED TOPIC DOCUMENTS ********** ) - -# License {#license} - -**[NOTE: This license is copied verbatim from the C++ Core Guidelines.]** -``` -__INCLUDE__(../LICENSE.txt) -``` - -# Contributors - -``` -__INCLUDE__(contributors.md) -``` - -__INCLUDE__(contributing.md) - -__INCLUDE__(glossary.md) - -__INCLUDE__(references.md) diff --git a/sources/modules/compilation-model/buildsystems.md b/sources/modules/compilation-model/buildsystems.md deleted file mode 100644 index 8e14fa01..00000000 --- a/sources/modules/compilation-model/buildsystems.md +++ /dev/null @@ -1,115 +0,0 @@ -## Module name: Build systems - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational --- Knowledge about build systems - -Main --- Usage of build system to compile a executable - -Advanced --- Add external libraries as a dependencies - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -* Building complex C++ projects by hand is tricky -* Build systems can help to resolve dependencies -* Build systems can help do distribute C++ code and help other to compile the code -* Build systems can help to find and include libraries as dependencies -* Build systems faciliate project management -* All major C++ projects are distributed with build systems - -### Topic introduction - -_Very brief introduction to the topic._ - -Build systems are used to configure, build, and install complex C++ projects. - - -### Foundational: Knowledge about build systems - -#### Background/Required Knowledge - -A student: -* Should know how to compile and link C++ programs - - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. To explain what a build system is -2. To explain that a build systems resolves dependencies -3. To explain that a build system supports compilation for different operating systems and architectures - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -None - -#### Points to cover - -_This section lists important details for each point._ - -* Mention that many build systems are available for C++ -* Mention benefits and challenges -* Build system help to only compile the C++ files with code changes and not the complete project - -### Main: Usage of build system to compile a executable - -#### Background/Required Knowledge - -* All of the above. - -#### Student outcomes - -A student should be able to: - -1. Download a C++ package and build the package -2. Write a configuration file to compile a C++ executable -3. Pass compiler options via the build system -4. Use the build system to generate the executable -5. Write a configuration file to compile a library and link the library to a C++ executable - -#### Caveats - -The instructions are restricted to the chosen build system and -not easily transferable. - - -#### Points to cover - -* Include paths to header files to the configuration -* Adding compiler flags -* How to build Release and Debug builds -* Linking external libraries to the C++ project -* Support compilation on different operating systems, compilers, and architectures - - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* How to build libraries -* How to have external libraries be downloaded during the build process -* Mention that build systems provide support for unit testing - diff --git a/sources/modules/compilation-model/linkage.md b/sources/modules/compilation-model/linkage.md deleted file mode 100644 index 9c2e96be..00000000 --- a/sources/modules/compilation-model/linkage.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ compilation model: Linkage {#linkage} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/compilation-model/translation-units.md b/sources/modules/compilation-model/translation-units.md deleted file mode 100644 index 94141b33..00000000 --- a/sources/modules/compilation-model/translation-units.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ compilation model: Translation units {#translunits} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/compile-time-programming/concepts.md b/sources/modules/compile-time-programming/concepts.md deleted file mode 100644 index cc9c122a..00000000 --- a/sources/modules/compile-time-programming/concepts.md +++ /dev/null @@ -1,6 +0,0 @@ -## Compile-time programming: concepts - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/compile-time-programming/function-templates.md b/sources/modules/compile-time-programming/function-templates.md deleted file mode 100644 index bf0db25f..00000000 --- a/sources/modules/compile-time-programming/function-templates.md +++ /dev/null @@ -1,6 +0,0 @@ -## Compile-time programming: Function Templates - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/compile-time-programming/requires-clause.md b/sources/modules/compile-time-programming/requires-clause.md deleted file mode 100644 index da90d76e..00000000 --- a/sources/modules/compile-time-programming/requires-clause.md +++ /dev/null @@ -1,6 +0,0 @@ -## Compile-time programming: requires-clause - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/compile-time-programming/requires-expressions.md b/sources/modules/compile-time-programming/requires-expressions.md deleted file mode 100644 index c5171666..00000000 --- a/sources/modules/compile-time-programming/requires-expressions.md +++ /dev/null @@ -1,140 +0,0 @@ -## Module name: Requires Expressions {#req-expr} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - -------------------------------------------------------------------------- -Level Objectives ------------------- ------------------------------------------------------ -Foundational Define and use requires-expressions to check - satisfaction of expressions by given parameters - -Main Define and use requires-expressions to check - properties of expressions - -Advanced --- -------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Requires-expressions allow a developer to perform compile-time evaluation -on the validity of other expressions. These are fundamental to the ability -to write concepts. [[Compile-time programming: concepts]][1] - -## Topic introduction - -_Very brief introduction to the topic._ - -Requires-expressions are compile-time predicates which evaluate to true -when their specified set of expressions are all valid for a given set of -inputs. - -### Foundational: Writing requires-expressions {#req-expr-basic} - -#### Background/Required Knowledge - -A student is able to: - -* Write and use a function template [[Compile-time programming: function templates]][2] -* Differentiate between expressions and statements - -It is helpful if: - -* The student is aware that attempting to specialize the template with types or values which do not match otherwise unstated assumptions will cause errors within the template. - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Write a simple-requirement to assert the validity of an expression -2. Write a type-requirement to check the existence of a type by its identifier -3. Write a compound-requirement to test the resulting type of an expression -4. Write a nested-requirement to test the constexpr value of an operation, as opposed to just the syntactic validity -5. Use a requires-expression within a concept, requires-clause, or `if constexpr` condition - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -To require that expressions, which evaluate to a boolean value -like `sizeof(t) == 4`, evaluate to `true` a nested-requirement is needed -(e.g., `requires sizeof(t) == 4;`). Omitting the `requires` results in a -simple-requirement, which is satisfied based purely on syntactic validity, -not on the result of the operation. - -#### Points to cover - -_This section lists important details for each point._ - -* All requires-expression requirements terminate with a semicolon. -* simple-requirements are used to check that an expression is well-formed. -* nested-requirements are introduced with `requires` and primarily used to check the result of an expression computable by the compiler, including concepts or other requires-expressions. -* type-requirements are introduced with `typename` and used to verify the existence of a type with a particular identifier. -* compound-requirements are enclosed in braces and can be used to check the resulting type of an expression. -* Checks are performed by the compiler, not at run time. -* If covering usage of requires-expression with requires-clause, [[Compile-time programming: requires clause]][3] demonstrate `requires requires` and show how to ever avoid writing it by using a concept. [[Compile-time programming: concepts]][1] - -### Main: Advanced requirements {#req-expr-main} - -#### Background/Required Knowledge - -* All of the above. -* Knowledge of `noexcept` - -A student is able to: - -* Write a concept [[Compile-time programming: concepts]][1] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Write compound-requirements which test the `noexcept`ness of an expression. -2. Use a concept as the target of a compound-requirement. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -* Compound-requirements allow the optional ability to test whether an expression is marked as `noexcept`, by using a trailing `noexcept` keyword. - -```cpp -struct S -{ - void foo() noexcept {} - void bar() {} -}; - -static_assert(requires(S s) { { s.foo() } noexcept; } ); // Succeeds. s.foo() is noexcept -static_assert(requires(S s) { { s.bar() } noexcept; } ); // Fails. s.bar() is not noexcept -``` - -* If the return-type-requirement of a compound-requirement is a concept, that concept is given the resulting type as the first parameter, followed by the specified parameters in the compound-requirement. `{ ++x } -> C` would substitute `C` and check that concept C is satisfied for those parameters. - -### Advanced {#req-expr-advanced} - -[1]: ../compile-time-programming/concepts.md -[2]: ../compile-time-programming/function-templates.md -[3]: ../compile-time-programming/requires-clause.md diff --git a/sources/modules/debugging-errors/build-errors.md b/sources/modules/debugging-errors/build-errors.md deleted file mode 100644 index 5e696d47..00000000 --- a/sources/modules/debugging-errors/build-errors.md +++ /dev/null @@ -1,6 +0,0 @@ -## Debugging Errors: Build errors - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/debugging-errors/compiletime-errors.md b/sources/modules/debugging-errors/compiletime-errors.md deleted file mode 100644 index 5d2d6c87..00000000 --- a/sources/modules/debugging-errors/compiletime-errors.md +++ /dev/null @@ -1,114 +0,0 @@ -## Debugging Errors: Compile-time errors {#compiletimeerr} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Understanding elementary error messages - -Main Dealing with most error messages - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Compiler error messages can be hard to read and even compiler specific. -However, they contain valuable information for determining the cause of the compile-time errors. -Oftentimes the error messages are very verbose to give you the most precise information about the error context, so learning how to extract the valuable information from the error message is an important skill that one should acquire. - -### Topic introduction - -_Very brief introduction to the topic._ - -C++ compilers try to statically determine errors at compile time to shift detection of problems that would occur later on (e.g., at link time or run time) to earlier point in time, where they can be addressed in an earlier stage of the development process. -The error message that the compiler generates directly relates to the C++ language definition and precisely lays out why the code is not valid and where it does not comply with the language rules. - -### Foundational: Understanding elementary error messages {#compiletimeerr-found} - -#### Background/Required Knowledge - -A student: - -* definitions [[C++ Object Model: Definitions - Foundational]][1] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. distill the core of an elementary error message. -2. act on elementary error messages. -3. differentiate between different error kinds (e.g., type errors, syntax errors, ...). -4. give examples for different kinds of errors. - - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* names mentioned in error message are presented in full detail and may not look exactly like specified by the programmer (e.g., `std::string` -> `std::basic_string`) - -#### Points to cover - -_This section lists important details for each point._ - -* methodology of reading error messages - * start with the first error - * read top down - * parse error message / pattern matching to error kinds -* linker errors [[Debugging Errors: Build errors - Foundational]][2] - - -### Main: Dealing with most error messages {#compiletimeerr-main} - -#### Background/Required Knowledge - -* compile-time programming [Soft dependency] - -#### Student outcomes - -A student should be able to: - -1. locate the principle template involved in a template error message. -2. determine why a specific overload is chosen, from the compiler’s error message. -3. apply common debugging techniques in a constexpr context. - -#### Caveats - -* argument dependent lookup -* there is currently no good debugger support for constexpr context - -#### Points to cover - -* templates related error messages -* overload resolution related errors -* reasoning about errors during constexpr execution (consteval) - * reverting to non-constexpr run-time debugging - * employing static_assert - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* Full error analysis, there are error messages that are out of the scope for students. - * Complicated SFINAE constructs - -[1]: ../object-model/definitions.md -[2]: ../debugging-errors/build-errors.md diff --git a/sources/modules/debugging-errors/runtime-errors.md b/sources/modules/debugging-errors/runtime-errors.md deleted file mode 100644 index 1a08f25e..00000000 --- a/sources/modules/debugging-errors/runtime-errors.md +++ /dev/null @@ -1,113 +0,0 @@ -## Debugging errors: Run-time errors {#runtimeerr} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Identifying the run-time error cause - -Main Introspection methodologies to trackdown run-time errors - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Code correctness is important, as erroneous programs can lead to real-world catastrophes, take for example, medical equipment failures that lead to people being exposed to too much radiation. -Techniques, such as, testing or fuzzing, help developers to identify erroneous states of the program. -However, when these techniques discover a run-time error, it’s up to the programmer to reason about and find the root cause of such run-time errors, so they need a well established process to debug run-time errors. - -### Topic introduction - -_Very brief introduction to the topic._ - -There exists a wide variety of methodologies, techniques, and tools to debug run-time errors. -In this topic, we give an overview of these and highlight how they can be applied to track down run-time errors in C++ programs. - -### Foundational: Identifying the run-time error cause {#runtimeerr-found} - -#### Background/Required Knowledge - -A student: - -* should be able to produce a basic running program. - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. verify the output of the program and identify incorrect outcomes. -2. phrase hypothesis what could cause the run-time error. -3. observe and extract program state at specific points of the program, to verify hypotheses. -4. make their program as observable as possible. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* run-time debugging can be domain specific -* not everything about the program state can be easily observed, students should be aware of that and learn basic techniques to make programs more observable -* students should be aware that the compilation mode (optimized vs debug) affects the debugging experience and also the program state itself - - -#### Points to cover - -_This section lists important details for each point._ - -* the basics of using a debugger -* compiling with debug information -* observability techniques, such as, logging output or even `printf` statements - -### Main: Introspection methodologies to trackdown run-time errors {#runtimeerr-main} - -#### Background/Required Knowledge - -* All of the above. - -#### Student outcomes - -A student should be able to: - -1. use a debugger to inspect and manipulate program state -2. extract crash information using proper libraries -3. can create a minimal reproducible example - -#### Caveats - -* Different forms of multiprocessing programs can have varying impact on debuggability, such as: - * parallel stl algorithms - * multi threading - * coroutines - * vector parallelism - - -#### Points to cover - -* How to use debuggers and the multitude of features they offer to manipulate and observe program state (e.g., break points, trap points, stack traces, manipulating program state). -* Use (non) standard library support for crash information extraction, e.g., logging libraries, libraries to capture crash reports, and sanitizer libraries (asan/ubsan/tsan). -* Creating minimal reproducible example and regressions tests from the extracted crash information. - - -### Advanced {#runtimeerr-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* ABI incompatibilities can have impact debugging experience where even observability tools, such as, debuggers, cannot correctly show the state of the program. -* Debugging in embedded environments. diff --git a/sources/modules/error-handling/c-style-error-codes.md b/sources/modules/error-handling/c-style-error-codes.md deleted file mode 100644 index 62dcfe98..00000000 --- a/sources/modules/error-handling/c-style-error-codes.md +++ /dev/null @@ -1,6 +0,0 @@ -## Error handling: C-style error codes {#cerrcodes} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/error-handling/categories-of-errors.md b/sources/modules/error-handling/categories-of-errors.md deleted file mode 100644 index 7c664742..00000000 --- a/sources/modules/error-handling/categories-of-errors.md +++ /dev/null @@ -1,114 +0,0 @@ -## Error handling: Categories of errors - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Categories of errors - -Main Handling different categories of errors - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Programs can run in a normal state or erroneous state. Students should be able -to identify different types of erroneous state and how to best handle them. - -### Topic introduction - -_Very brief introduction to the topic._ - -This topic is an umbrella topic that refers to the different topics for types of errors and error handling. - -### Foundational: Categories of errors {#coe-found} - -#### Background/Required Knowledge - -A student: - -* should know the basics about linkage [[C++ compilation model: Linkage - Foundational]][1] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Describe different kinds of errors and exceptional situations that require different approaches of error handling. -2. Provide some examples of the different error categories. -3. Identify potential erroneous code sections and attribute them to different error categories. - - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -No caveats at present. - -#### Points to cover - -_This section lists important details for each point._ - -Errors can happen at different times during software lifetime. - -* Compile-time errors -* Link-time errors -* Execution-time errors - -There are different types of errors - -* Logic errors (violations of logical preconditions) -* Run-time errors (errors during code execution due to causes that are external to the program) - - -### Main: Handling different categories of errors {#coe-main} - -#### Background/Required Knowledge - -#### Student outcomes - -A student should be able to: - -1. pick the right error handling approach for a given problem. -2. enumerate different error handling strategies. -3. make a clear distinction between error-handling code and normal-case handling code - - -#### Caveats - -* The different error handling strategies have different trade-offs (runtime performance, readability, ...) -* The trade-off space depends on the run-time context (embedded, ...) -* There also exist unhandleable errors (e.g., ODR violations, undefined behavior) - -#### Points to cover - -* Exception handling [[Error handling: Exception handling - Foundational]][2] -* Returning a value indication failure [[Error handling: C-style error-codes - Foundational]][3] -* Terminating the program -* Improving error handling by having the error occur at an earlier stage in the software development cycle [[Error handling: Static assert - Foundational]][4] - -### Advanced {#coe-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -[1]: ../compilation-model/linkage.md -[2]: ../error-handling/exception-handling.md -[3]: ../error-handling/c-style-error-codes.md -[4]: ../error-handling/static-assert.md diff --git a/sources/modules/error-handling/error-codes.md b/sources/modules/error-handling/error-codes.md deleted file mode 100644 index 488f1554..00000000 --- a/sources/modules/error-handling/error-codes.md +++ /dev/null @@ -1,99 +0,0 @@ -## Error handling: Error codes {#ecodes} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Handling error codes with `std::error_code` - -Main Designing APIs around `std::error_code` - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -C++ offers a type safe way of passing around errors, contrary to the C-style of error handling, by this, we prevent bugs when passing error codes. -Furthermore, error handling with error codes is more commonly used than exception handling, which only should be used in exceptional situations and in some environments is not feasible at all, e.g., in embedded or performance critical software. - -### Topic introduction - -_Very brief introduction to the topic._ - -C++ offers `std::error_code`, which encapsulates error codes in a type safe way. -This topic describes how to use these error codes. - -### Foundational: Handling error codes with `std::error_code` {#eh-found} - -#### Background/Required Knowledge - -A student: - -* should know that there are different ways of error handling [[Error handling: Categories of errors]][1] -* should know function return values - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. write code to handle errors with `std::error_code`, e.g., obtain the message of the error code or check if an error occurred. -2. distinguish between the different categories and make justified decisions when to use which - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -* a brief overview of `std::error_code` and how to use it - -### Main: Designing APIs around `std::error_code` {#eh-main} - -#### Background/Required Knowledge - -* should know how to use reference parameters as an output parameter - -#### Student outcomes - -A student should be able to: - -1. create an `error_code` and design API that work with `std:error_code` -2. write code that utilizes `std::error_category` -3. explain the difference between C-style error handling with errno and `std::error_code` -4. make effective use of the interface of `std::error_code` - -#### Caveats - -* reset errno before calling a function that might set errno (better pass an input parameter `std::error_code`) - -#### Points to cover - -* provide a full picture of `std::error_code` and it’s APIs -* `std::error_category` (explorative) - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* implementing your own `error_category` - -[1]: error-handling/categories-of-errors.md diff --git a/sources/modules/error-handling/exception-handling.md b/sources/modules/error-handling/exception-handling.md deleted file mode 100644 index 9f073a49..00000000 --- a/sources/modules/error-handling/exception-handling.md +++ /dev/null @@ -1,111 +0,0 @@ -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Standards exception hierarchy - -Main Exception guarantees - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Exception handling is used to be able to continue the program in case of -exceptional situations (like requesting a ridiculous amount of memory: -`bad_alloc`). - -### Topic introduction - -_Very brief introduction to the topic._ - -There are other forms of handling difficult situations, but here we concentrate -on exception handling and the peculiarities/characteristics of it. Because -there are different forms, we should know when to use which type of handling -special situations. - -### Foundational: Standards exception hierarchy {#eh-found} - -#### Background/Required Knowledge - -A student: - -* should know about basic and user-defined types [[Type system: fundamental types]][1] [[Type system: user-defined types]][2] -* should know about flow of control [???] -* should know about blocks and statements [???] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Explain how some `std::` calls may cause an exception -2. Discern the different standard exception types -3. Write simple try … except code (e.g., out of memory, vector at indexing) -4. Explain on a “simplified” conceptual level what happens when an exception is thrown and is bubbled up through the callers until it is caught - - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* Exceptions should be used for exceptional situations and should not be used to manage normal control flow. - -#### Points to cover - -_This section lists important details for each point._ - -* Exception hierarchy from the standard library -* Common library functions that may throw exceptions -* Basic handling exceptions: try/catch/throw -* How exceptions bubble up until caught - - -### Main: Exception guarantees {#eh-main} - -#### Background/Required Knowledge - -* RAII -* Order of construction/destruction of class members - -#### Student outcomes - -A student should be able to: - -1. Explain the four different exception guarantees -2. Explain the exception guarantees that the standard library containers offer. -3. Explain what happens when a exception is thrown in constructor - - -#### Caveats - -* Make sure code is designed with RAII in mind to prevent resources leaking during exception handling, when the stack is unwound. -* Care should be taken in constructor design to make all fully constructed members deleted when the stack unwinding mechanism is activated. - -#### Points to cover - -* Exception guarantees: Nothrow/Strong/Basic/No -* Rethrowing an exception - -### Advanced: Exception-safe containers and edge cases {#eh-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* Rethrowing a modified exception -* Writing exception safe containers - -[1]: ../type-system/fundamental-types.md -[2]: ../type-system/user-defined-types.md \ No newline at end of file diff --git a/sources/modules/error-handling/static-assert.md b/sources/modules/error-handling/static-assert.md deleted file mode 100644 index 0bb472ff..00000000 --- a/sources/modules/error-handling/static-assert.md +++ /dev/null @@ -1,6 +0,0 @@ -## Error handling: Static assert {#staticassert} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/functions/calling-functions.md b/sources/modules/functions/calling-functions.md deleted file mode 100644 index ee90b37c..00000000 --- a/sources/modules/functions/calling-functions.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ functions: calling functions - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/functions/defaulted-parameters.md b/sources/modules/functions/defaulted-parameters.md deleted file mode 100644 index 3194ce69..00000000 --- a/sources/modules/functions/defaulted-parameters.md +++ /dev/null @@ -1,122 +0,0 @@ -## Functions: default argument {#func-args} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - -Functions in C++ may be overloaded with different numbers and types of -parameters. It may be of value to specify default arguments for some number -of parameters, to allow a caller to avoid specifying arguments that -rarely change, or to enable expanding the set of parameters while -maintaining backward compatibility with existing callers. - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Define and use functions with default arguments - -Main --- - -Advanced refinement of default arguments through multiple - declarations ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Default arguments allow the omission of arguments with obvious or common -values. Also may be utilized to extend an existing function signature -without forcing changes to existing calling code. - -### Topic introduction - -_Very brief introduction to the topic._ - -Explain how default arguments work and how to define them. - -### Foundational: Using and defining functions with default arguments {#func-args-basic} - -#### Background/Required Knowledge - -A student is able to: - -* Make calls to existing functions, passing arguments [[Functions: calling functions]][1] -* Declare member and non-member functions, separate from definitions -* Define member and non-member functions [[Functions: member functions]][2] -* Explain what a default constructor is and does [[C++ object model: constructors]][3] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Call to a function with a default argument with or without that argument specified -2. Declare a function with a default argument, and omit the default in the definition's signature -3. Explain when the lifetime of a default argument begins and ends - - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* When no forward-declaration exists, the definition serves as the declaration -* When multiple declarations exist, only one may specify the default for any particular parameter, but multiple declarations may specify the defaults for different parameters. -* Additional default values may be specified for other parameters in repeat declarations -* Calling an overloaded function with fewer arguments may be ambiguous with regard to an overload with default arguments - -#### Points to cover - -_This section lists important details for each point._ - -* Default value may only be specified once for each parameter among all declarations -* Default values must start from the rightmost parameter and continue leftward without gaps -* Considerations of when to use default arguments vs overload set - -### Main: implementing * {#func-args-main} - -#### Background/Required knowledge - -* All of the above. - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -### Advanced {#func-args-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -Subsequent redeclarations of the same function may add default argument -values, which are then usable by callers. -Though a single parameter cannot be given a default argument twice in the same -translation unit, it is legal, though ill-advised, to give the same -function different default arguments in different translation units. - - -[1]: ../functions/calling-functions.md -[2]: ../functions/member-functions.md -[3]: ../object-model/constructors.md diff --git a/sources/modules/functions/member-functions.md b/sources/modules/functions/member-functions.md deleted file mode 100644 index 874011f5..00000000 --- a/sources/modules/functions/member-functions.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ functions: member functions - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/functions/passing-parameters-by-reference.md b/sources/modules/functions/passing-parameters-by-reference.md deleted file mode 100644 index aebdec61..00000000 --- a/sources/modules/functions/passing-parameters-by-reference.md +++ /dev/null @@ -1,98 +0,0 @@ -# Module name: Passing Parameters by Reference -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -## Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - - - - - - - - - - - - - - - - - - -
LevelObjectives
FoundationalAvoiding copies using const-reference modifiers
MainUsing references to modify external data
Advanced
- -## Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -## Topic introduction - -_Very brief introduction to the topic._ - -Explain what a reference type is and how it constrasts with a value type. - -## Foundational: Using reference types to avoid copies - -### Background/Required Knowledge - -A student is able to: - -* Define and call a function with parameters - -### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Use const-refernce types for function arguments -2. Explain what considerations to take when deciding whether or not to use a const-reference type - -### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -### Points to cover - -_This section lists important details for each point._ - -* No copy of the data is made when taken by constant reference -* A constant reference value cannot be modified -* The lifetime of a constant reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use. -* Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance. - -## Main: Using references to modify external data - -### Background/Required Knowledge - -* All of the above - -### Student outcomes - -A student should be able to: - -1. Define and utilize a non-const reference for passing values out of a function - -### Caveats - -### Points to cover - -* If the function does not intend to modify the value, const-references should be preferred -* A reference value may be modified -* The lifetime of a reference cannot be expected to extend beyond the lifetime of the function, so the reference should not be saved off for future use. -* Taking a reference is not always a time or space savings. Modern machines may use 8-bytes to reference a 4-byte integer, for instance. - -## Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - diff --git a/sources/modules/functions/passing-parameters-by-value.md b/sources/modules/functions/passing-parameters-by-value.md deleted file mode 100644 index a45b0e92..00000000 --- a/sources/modules/functions/passing-parameters-by-value.md +++ /dev/null @@ -1,91 +0,0 @@ -# Module name: Passing Parameters by Value -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -## Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - - - - - - - - - - - - - - - - - - -
LevelObjectives
FoundationalDefining and calling functions with values
Main
Advanced
- -## Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -The fundamental element for code-reuse is a function. For functions to be -useful, we need to parameterize them. Understanding how to do such is thus -fundamental to programming in any language. - -## Topic introduction - -_Very brief introduction to the topic._ - -Explain how to define functions with parameters and call them with values. - -## Foundational: Using reference types to avoid copies - -### Background/Required Knowledge - -A student is able to: - -* Explain what a function is - -### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Call a function with any number of parameters using the same number of arguments -2. Define a function with any number of parameters - -### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -### Points to cover - -_This section lists important details for each point._ - -* A function is called by invoking the name of the function, followed by parentheses -* For each parameter in the function signature, a value must be provided, and in the same order -* Multiple values passed to a function are comma-separated -* When defining a function, you must list the parameters with the type first, and parameter name second - -## Main: Using references to modify external data - -### Background/Required Knowledge - -### Student outcomes - -### Caveats - -### Points to cover - -## Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - diff --git a/sources/modules/functions/user-defined-literals.md b/sources/modules/functions/user-defined-literals.md deleted file mode 100644 index a9894ed3..00000000 --- a/sources/modules/functions/user-defined-literals.md +++ /dev/null @@ -1,128 +0,0 @@ -## Functions: user-defined literals (UDL) {#udl} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - -Literals are a way to write values in the code, such as strings and numbers. -User-defined literals (UDL) allow to add a suffix to a string or number to change the meaning. -The suffix selects a function (an operator) that can alter the value and type of the literal. -The C++ library provides certain operators already and a user can add more by providing such operators. - -------------------------------------------------------------------------- -Level Objectives ----------------- -------------------------------------------------------- -Foundational using and understanding UDLs - -Main implementing your own UDLs - -Advanced Advanced use (```"{}, {}!"_fmt("Hello", "World")```) -------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -* Allows clearer expression of intent in C++. -* `std::string`: `"Hello, world!"s` -* `std::chrono`: `3h + 10min + 5s` - -### Topic introduction - -_Very brief introduction to the topic._ - -* Explain the existence of user defined literals. Example: `12min + 17s` is terse, - expressive and type safe. - -### Foundational: Using UDLs {#udl-basic} - - -#### Background/Required Knowledge - - -A student: -* knows how to form numeric literals, e.g., `1.5f` means a `float` of value `1.5`. -* is familiar with the major C++ types: - * `bool` (Boolean type) - * `int` (Integer type) - * `double` (Floating-point type) - * `std::string` (Text type) - * `std::vector` (Collection type) -* knows that namespaces exist, and namespace `std`. -* knows what using-declarations and using-directives are. [[C++ object model: declarations]][2] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. use `using namespace std::string_literals`\[1]. -2. recognise UDLs in code that they are reading. -3. figure out which UDL definitions for a used type exist. -4. identify parts of the standard library that make use of UDLs. -5. prevent the dangers of temporaries created with `"blah"s` as well as with - `std::string{"blah"}`. -6. effectively selects the right set of namespaces in using-directives from the - sub-namespaces `std::literals`. - -\[1]: explain that it's okay to use a using-directive to "activate" UDLs. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* A student gets confused by the similarities and differences between built-in - suffixes and UDLs and between UDLs from different namespaces. -* A student "activates" two suffixes with the same signature from different - namespaces. - -#### Points to cover - -_This section lists important details for each point._ - -### Main: implementing UDLs {#udl-main} - - -#### Background/Required Knowledge - - -* All of the above. - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. write a UDL operator of their own. -2. separate unrelated UDLs into distinct namespaces. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -No caveats at present. -#### Points to cover - -_This section lists important details for each point._ - -No caveats at present. -### Advanced {#udl-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -[1]: ../object-model/types.md -[2]: ../object-model/declarations.md diff --git a/sources/modules/meta-error-handling/static_assert.md b/sources/modules/meta-error-handling/static_assert.md deleted file mode 100644 index 6b50e9ef..00000000 --- a/sources/modules/meta-error-handling/static_assert.md +++ /dev/null @@ -1,137 +0,0 @@ -## Meta-error handling: `static_assert` {#static-assert} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ----------------------------------------------------------------------------- -Level Objectives ----------------- ----------------------------------------------------------- -Foundational Calling ```static_assert``` with a constant expression - -Main Using ```static_assert``` to detect contract violations - and improve error messages - -Advanced --- ----------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -`static_assert` allows the developer to enforce that conditions which can -be checked during compilation will force build errors when violated. -Additionally, they are the best mechanism by which a developer can pass -useful information to other developers regarding what violation occurred or -what must be done, instead. - -### Topic introduction - -_Very brief introduction to the topic._ - -`static_assert` is a compile-time evaluated function that asserts the -truth of a supplied predicate, issuing an optional user-supplied error -message if the predicate is `false`. - -### Foundational: Calling `static_assert` with a constant expression {#static-assert-basic} - -#### Background/Required Knowledge - -A student: - -* Should be able to explain the difference between code evaluated at compile-time and run-time -* Should be able to cite some examples of compile-time known information, such as `sizeof(T)` - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Assert the expected size of a structure using `static_assert` - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -* X -* In addition to what is wrong, a good error message will inform the user of how to correct it - -### Main: Contracts and `static_assert` {#static-assert-main} - -#### Background/Required Knowledge - -* All of the above. -* General understanding of compile-time requirements - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. Utilize `static_assert` to verify preconditions of a meta-function -2. Utilize `static_assert` to verify the results of meta-functions for known values - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -* When writing a meta-function, use `static_assert` to test the results -* Write `static_assert` calls at the scope of the code they are guarding -```cpp -template -struct container { - std::map vals; - - // Test location #1 - static_assert( - std::is_default_constructible_v, - "container type T must be default constructible");i - - void add(int key, T const& t) { - // Test location #2 - static_assert( - std::is_default_constructible_v, - "container type T must be default constructible"); - // std::map::operator[] requires default constructible type for - // the value. This will cause a build failure deep in the - // implementation of std::map, when T is not default constructible - vals[key] = t; - } -}; - -struct NoDefCtor { - NoDefCtor() = delete; - NoDefCtor(double d) {} -}; - -container c; // If Test #1 was omitted, this would succeed -// This is ill-formed. Test #2 would catch this and provide a better -// error message for the user -c.add(42, NoDefCtor(1.0)); -``` - -### Advanced {#static-assert-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ diff --git a/sources/modules/object-model/constant-objects.md b/sources/modules/object-model/constant-objects.md deleted file mode 100644 index 1815b1e0..00000000 --- a/sources/modules/object-model/constant-objects.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: constant objects - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/constructors.md b/sources/modules/object-model/constructors.md deleted file mode 100644 index 41d0ab63..00000000 --- a/sources/modules/object-model/constructors.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: constructor - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/copy-semantics.md b/sources/modules/object-model/copy-semantics.md deleted file mode 100644 index d0cb180b..00000000 --- a/sources/modules/object-model/copy-semantics.md +++ /dev/null @@ -1,145 +0,0 @@ -## C++ object model: copy semantics {#copy} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ---------------------------------------------------------- -Level Objectives -------------- ------------------------------------------- -Foundational understanding how and when are copies made - -Main implementing user-defined copy operations - -Advanced special cases: copy elision ---------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Copy semantics allows the user to define how objects of a class get replicated and interact on a value level. - -### Topic introduction - -_Very brief introduction to the topic._ - -Explains when and how objects are copied. - -### Foundational: How and when are copies made {#copy-basic} - -#### Background/Required Knowledge - - -A student is able to: -* explain what a C++ type is? [[C++ object model: types]][1] -* explain what an object is? [[C++ object model: objects]][2], [[C++ object model: constant objects]][3] -* define and understand class invariants? - -It helps when a student is able to: -* use move semantics [[C++ object model: move semantics]][4] -* explain special member functions [[C++ object model: special member functions]][5] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. explain what copy semantics accomplish - * establishing "equivalent" object state in another object -2. explain difference between copying a reference and copying a value\* -3. explain where copies are made - -\* In other languages these differences are sometimes referred to as shallow and deep copy. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* Compiler-provided copy operations may result in ownership problems (e.g., `char*`). These ownership problems can generally be solved by using types whose copy operations have the appropriate semantics, e.g., `std::string` instead of `char*` to hold string values. - -#### Points to cover - -_This section lists important details for each point._ - -* Principle of copying - * Copying of types, which follow the rule of zero - * Copying of types, with user defined copy operations - * Copying an object does not change the original -* Practical applications - * `std::unique_ptr` (has no copy) - * Strings (copies the value) - - -### Main: Implementing user-defined copy operations {#copy-main} - - -#### Background/Required Knowledge - - -A student is able to: -* identify special member functions [[C++ object model: special member functions]][5] - -It helps when a student is able to: -* use move semantics [[C++ object model: move semantics]][4] -* explain the rule of zero [[C++ object model: rule-of-zero]][7] -* explain the rule of five [[C++ object model: rule-of-five]][6] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: -* explain when they have to implement the copy operations for their own type - * Copy constructor - * Copy assignment operator -* implement copy operations for their own types -* _Optional_: explain when copying with basic and strong exception guarantees is useful - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* Intricacies when implementing copy operations: - * Examples of how _not_ to write copy operations (e.g., C++03 `std::auto_ptr`) - -#### Points to cover - -_This section lists important details for each point._ - -* Copy constructors and copy assignment operators - * How compiler generates default copy operations - * =default, =delete (No copy) - * How-to write your own copy operations - * Rule-of-five - * Copy assignment operators can be ref-qualified to avoid assigning into temporary objects. - -### Advanced {#copy-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -When can copies be elided and when does the standard guarantee copy elision. -References: -* [Abseil tip of the Week #166](https://abseil.io/tips/166) -* [cppreference - Copy elision](https://en.cppreference.com/w/cpp/language/copy_elision) - -[1]: ../object-model/types.md -[2]: ../object-model/objects.md -[3]: ../object-model/constant-objects.md -[4]: ../object-model/move-semantics.md -[5]: ../object-model/special-member-functions.md -[6]: ../object-model/rule-of-five.md -[7]: ../object-model/rule-of-zero.md diff --git a/sources/modules/object-model/declarations.md b/sources/modules/object-model/declarations.md deleted file mode 100644 index 1a966abe..00000000 --- a/sources/modules/object-model/declarations.md +++ /dev/null @@ -1,117 +0,0 @@ -## C++ object model: Declarations - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Declaring variables - -Main Declaring for programs - -Advanced Special cases and peculiarities - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -* Introduces a name and it’s type -* `int baz;` -* `void bar();` -* `class Foo;` - -### Topic introduction - -_Very brief introduction to the topic._ - -Introduce names and their associated type in a scope. - -### Foundational: Declaring variables - - -#### Background/Required Knowledge - - -A student: - -* is familiar with the basic C++ types: - * bool (Boolean type) - * int (Integer type) - * double (Floating-point type) - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. declare a variable with a specific type ‘int baz;’ -2. declare a function ‘void bar();’ -3. declare a class ‘class Foo;’ -4. forward declare a user-defined type or a function -5. explain the difference between a definition and a declaration - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -No caveats at present. - -#### Points to cover - -_This section lists important details for each point._ - -### Main: Declarations for programs - - -#### Background/Required Knowledge - - -* All of the above. -* Basic template syntax - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. create header and source files with a declaration in the former and definition of a variable/function in the latter -2. declare type aliases to introduce a type with an alternative name ‘using std::string;’ -3. write a forward template declaration - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* Declaring aliases can introduce name clashes -* Prefer using declaration’s over using directives in header files [link] -* The order of declarations dictates the order of initialization - -#### Points to cover - -_This section lists important details for each point._ - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* asm declaration -* using-enum-declaration -* extern "C" declarations diff --git a/sources/modules/object-model/definitions.md b/sources/modules/object-model/definitions.md deleted file mode 100644 index e0447fab..00000000 --- a/sources/modules/object-model/definitions.md +++ /dev/null @@ -1,115 +0,0 @@ -## C++ object model: Definitions {#def} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Defining variables and ODR - -Main Defining for programs - -Advanced Special cases and peculiarities - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -* A definition is a declaration that supplies all that is needed for a complete entity -* `int baz = 42;` -* `void bar() { /* implementation */ }` -* `class Foo { /* class body */ };` - -### Topic introduction - -_Very brief introduction to the topic._ - -A definition extends a declaration, providing all that is needed for a complete -entity, e.g., allocate memory for variables, provide the implementation for -functions, complete definitions of data and function members of a class. - -### Foundational: Defining variables and ODR {#def-found} - - -#### Background/Required Knowledge - - -A student: - -* is familiar with declarations [[C++ object model: declarations]][1] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. define a variable with a specific type `int baz = 42;` -2. define a function `void bar() {}` -3. define a class `class Foo {};` -4. explain the one definition rule - - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -No caveats at present. - -#### Points to cover - -_This section lists important details for each point._ - -* One definition rule (ODR) - -### Main: Defining for programs {#def-main} - - -#### Background/Required Knowledge - - -* All of the above. -* is familiar with declarations [[C++ object model: declarations]][1] - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. organize variables, functions, classes into multiple translation units, describing interface with declarations and providing the implementations with definitions without violating ODR. -2. distinguish between template declaration and definition - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* Putting a definition into a header file that is included more than once leads to ODR violations, possibly resulting in linker errors. - -#### Points to cover - -_This section lists important details for each point._ - -### Advanced: Special cases and peculiarities {#def-advanced} - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* ABI Incompatibilities: Different definitions of the same type in multiple object files can lead to subtle program errors. - -[1]: ../object-model/declarations.md diff --git a/sources/modules/object-model/move-semantics.md b/sources/modules/object-model/move-semantics.md deleted file mode 100644 index 81723536..00000000 --- a/sources/modules/object-model/move-semantics.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: move semantics - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/objects.md b/sources/modules/object-model/objects.md deleted file mode 100644 index 31aa5b5b..00000000 --- a/sources/modules/object-model/objects.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: objects - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/rule-of-five.md b/sources/modules/object-model/rule-of-five.md deleted file mode 100644 index 894ffdb9..00000000 --- a/sources/modules/object-model/rule-of-five.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: rule of five - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/rule-of-zero.md b/sources/modules/object-model/rule-of-zero.md deleted file mode 100644 index 66174ad5..00000000 --- a/sources/modules/object-model/rule-of-zero.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: rule of zero - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/special-member-functions.md b/sources/modules/object-model/special-member-functions.md deleted file mode 100644 index f67320b3..00000000 --- a/sources/modules/object-model/special-member-functions.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: special member functions - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/object-model/types.md b/sources/modules/object-model/types.md deleted file mode 100644 index 1fcd0ea2..00000000 --- a/sources/modules/object-model/types.md +++ /dev/null @@ -1,6 +0,0 @@ -## C++ object model: types - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/program-design/algorithms.md b/sources/modules/program-design/algorithms.md deleted file mode 100644 index 11dddb02..00000000 --- a/sources/modules/program-design/algorithms.md +++ /dev/null @@ -1,6 +0,0 @@ -## Program Design: Algorithms - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/program-design/concepts.md b/sources/modules/program-design/concepts.md deleted file mode 100644 index df6c8a0c..00000000 --- a/sources/modules/program-design/concepts.md +++ /dev/null @@ -1 +0,0 @@ -See [concepts](../compile-time-programmings/concepts.md). diff --git a/sources/modules/program-design/containers.md b/sources/modules/program-design/containers.md deleted file mode 100644 index 61d9daec..00000000 --- a/sources/modules/program-design/containers.md +++ /dev/null @@ -1,125 +0,0 @@ -## Program Design: Containers {#cont} - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational Using standard containers - -Main Extending standard containers and day-to-day usages - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -Storing data is an essential part of computations. -We use abstractions to make it easier to reason about and work with the data. -This leads to grouping related data variables together in data structures to give the grouping a name and to be able to make multiple instances of that data structure. -Data structures are therefore foundational building blocks for program design and are present in almost every program. - -Data structures come in many different forms, but there are special data structures that group objects of related types together. -In C++ these collections of data are called containers. -The C++ standard library provides a wide range of such common containers. -To make algorithms more universally applicable to containers, the standard library defines a common interface. -This way, containers build a bridge between algorithms and how data is organized. - - -### Topic introduction - -_Very brief introduction to the topic._ - -### Foundational: Using standard containers {#cont-found} - -#### Background/Required Knowledge - -A student: - -* "for loops" -* "defining variables" -* "main function" - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. setup and add objects to a container -2. work with objects that are stored in a container - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -* On a foundational level, avoid using iterators when teaching containers to prevent problems, such as iterator invalidation or dangling iterators. -* Avoid going deep into the template notation -* Teach people to not use `vector` - -#### Points to cover - -_This section lists important details for each point._ - -* Creating containers, adding objects, iterating over them using range based or index based for loops. -* `vector`, `string`, `unordered_map`, `unordered_set` -* Notation for having container of different value types with angle brackets - - -### Main: Extending standard containers and day-to-day usages {#cont-main} - -#### Background/Required Knowledge - -* Basic understanding of standard algorithms [[Program Design: Algorithms - Foundational]][1] -* Basic understanding of classes and class templates [[User-defined Types: Class Templates - Foundational]][2] - -#### Student outcomes - -A student should be able to: - -1. make effective use of the standard containers. -2. make use of iterators to iterate over a sequence and call algorithms. -3. make a proper choice what container to use based on its characteristics. -4. write a container class template for a specific need (based on a standard container). -5. make use of common container idioms. - -#### Caveats - -* Iterator invalidation -* When extending standard containers, prefer delegation over inheritance - -#### Points to cover - -* Alternative ways of iterating over a container using iterators -* Adapting or extending standard containers (e.g., writing wrapper types with additional semantics) -* Discuss the different characteristics and trade-offs of standard containers -* Common idioms (e.g., find-erase) -* Usage of end-of-sequence iterators [[Program Design: Iterators - Foundational]][3] -* [Optional] Using containers together with ranges [[Program Design: Ranges - Foundational]][4] - - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ - -* creating your own STL compatible containers from the ground up -* using containers with non-default allocators - -[1]: ../program-design/algorithms.md -[2]: ../user-defined-types/class-templates.md -[3]: ../program-design/iterators.md -[4]: ../program-design/ranges.md diff --git a/sources/modules/program-design/iterators.md b/sources/modules/program-design/iterators.md deleted file mode 100644 index a8dfda39..00000000 --- a/sources/modules/program-design/iterators.md +++ /dev/null @@ -1,6 +0,0 @@ -## Program Design: Iterators - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/program-design/ranges.md b/sources/modules/program-design/ranges.md deleted file mode 100644 index 52162e29..00000000 --- a/sources/modules/program-design/ranges.md +++ /dev/null @@ -1,6 +0,0 @@ -## Program Design: Ranges - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/type-system/fundamental-types.md b/sources/modules/type-system/fundamental-types.md deleted file mode 100644 index 4dfae7e1..00000000 --- a/sources/modules/type-system/fundamental-types.md +++ /dev/null @@ -1,6 +0,0 @@ -## Type system: Fundamental types - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/type-system/user-defined-types.md b/sources/modules/type-system/user-defined-types.md deleted file mode 100644 index fa4d4903..00000000 --- a/sources/modules/type-system/user-defined-types.md +++ /dev/null @@ -1,6 +0,0 @@ -## Types system: User-defined types - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/user-defined-types/class-templates.md b/sources/modules/user-defined-types/class-templates.md deleted file mode 100644 index 4dad8c04..00000000 --- a/sources/modules/user-defined-types/class-templates.md +++ /dev/null @@ -1,6 +0,0 @@ -## User-defined Types: Class Templates - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/sources/modules/user-defined-types/user-defined-literals.md b/sources/modules/user-defined-types/user-defined-literals.md deleted file mode 100644 index c23e1b2c..00000000 --- a/sources/modules/user-defined-types/user-defined-literals.md +++ /dev/null @@ -1 +0,0 @@ -See [user-defined-literals](../functions/user-defined-literals.md). diff --git a/sources/obtaining_document.md b/sources/obtaining_document.md deleted file mode 100644 index 9fad82d3..00000000 --- a/sources/obtaining_document.md +++ /dev/null @@ -1,25 +0,0 @@ -# Obtaining This Document: The Most Recent Version and Alternate Formats - -The most recent version of this document is available as an online -HTML document at: -. - -The version of the document that you are currently reading is available in the -following formats: - - 1. online (HTML) format as a single large HTML document: - - - 2. EPUB format: - - - 3. online (HTML) format, split across multiple HTML documents: - - **[Note: The support for this format needs more work (in order to beautify - and fix linking issues).]** - -Older versions of this document are also available. -In general version _ver_ is available at -https://cplusplus.github.io/SG20/_ver_/html. -For example, version 0.1.0 (assuming that this version exists) would be -available at . diff --git a/sources/references.md b/sources/references.md deleted file mode 100644 index 903e2b5c..00000000 --- a/sources/references.md +++ /dev/null @@ -1,46 +0,0 @@ -# References - -## References on Learning Outcomes - -- D. Kennedy, A. Hyland, and N. Ryan. - Writing and Using Learning Outcomes: A Practical Guide, 2007. - . - -- B. S. Bloom, M. D. Engelhart, E. J. Furst, W. H. Hill, and D. R. Krathwohl. - Taxonomy of educational objectives: The classification of educational goals. - Handbook I: Cognitive domain. New York: David McKay Company, 1956. - -- Bloom's Taxonomy. - . - -- Effective Use of Performance Objectives for Learning and Assessment - (For Use With Fink’s and Bloom’s Taxonomies), - University of New Mexico, School of Medicine, Teaching and Educational Development, - . - -## Working Group Documents Related to C++ Teaching Guidelines - -- Christopher Di Bella, Simon Brand, and Michael Adams. - P1389R0 --- - Standing Document for SG20: Guidelines for Teaching C++ to Beginners. - . - -- Christopher Di Bella. - P1725R0 --- - Modular Topic Design. - . - -- JC van Winkel, Bjarne Stroustrup, and Florian Sattler. - P2193 --- - How to structure a teaching topic. - . - -- JC van Winkel and Christopher Di Bella. - P1231 --- - Proposal for Study Group: C++ Education. - . - -- H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, and M. Wong. - P2000 --- - Direction for ISO C++, Section 5.1. - . diff --git a/tools/build/aspell_frontend b/tools/build/aspell_frontend deleted file mode 100755 index d78874f4..00000000 --- a/tools/build/aspell_frontend +++ /dev/null @@ -1,14 +0,0 @@ -#! /usr/bin/env bash - -cmd_dir="$(dirname "$0")" || exit 1 - -top_dir="$cmd_dir/../.." -spellcheck_dir="$top_dir/config/spellcheck" -wordlist="wordlist" -if [ ! -f "$spellcheck_dir/$wordlist" ]; then - echo "ERROR" - exit 1 -fi -tmp_wordlist=$(mktemp /tmp/wordlist.XXXXXX) -cat $spellcheck_dir/wordlist $spellcheck_dir/ignored_words.txt > $tmp_wordlist -exec aspell --home-dir="$spellcheck_dir" --personal $tmp_wordlist --lang en "$@" diff --git a/tools/build/build b/tools/build/build deleted file mode 100755 index c3c1330b..00000000 --- a/tools/build/build +++ /dev/null @@ -1,106 +0,0 @@ -#! /usr/bin/env bash - -################################################################################ -# Some helper functions. -################################################################################ - -# Terminate with error. -panic() -{ - echo "ERROR: $@" 1>&2 - exit 1 -} - -# Print usage information. -usage() -{ - echo "bad usage: $@" - cat << EOF - build - Build the document. - - Usage - ===== - - $0 -d \$install_dir -v \$version - - Options - ======= - - -d \$install_dir - Set the installation directory for the built release to \$install_dir. - - -v \$version - Set the document version $\version. - - Examples - ======== - - $0 -d /tmp/sg20_test/install -v v0.0.1 -EOF - exit 2 -} - -################################################################################ -# Perform some basic initialization. -################################################################################ - -cmd_dir=$(dirname "$0") || panic "cannot determine directory name" -source_dir="$cmd_dir/../.." - -################################################################################ -# Parse command line. -################################################################################ - -install_dir= -version= -spellcheck=0 - -while getopts d:v:s opt; do - case $opt in - d) - install_dir="$OPTARG";; - v) - version="$OPTARG";; - s) - spellcheck=1;; - \?) - usage - break;; - esac -done -shift $((OPTIND - 1)) - -if [ -z "$install_dir" ]; then - usage "no output directory specified" -fi -if [ -z "$version" ]; then - usage "no document version specified" -fi - -version=PR_${version%/*} - -################################################################################ -# Build the document. -################################################################################ - -if [ ! -d "$install_dir" ]; then - mkdir -p "$install_dir" || \ - panic "cannot make installation directory $install_dir" -fi - -(cd "$source_dir" && make clean) || \ - panic "cannot make clean" - -(cd "$source_dir" && \ - make DOC_VERSION="$version" DOC_SPELLCHECK_MUST_PASS="$spellcheck" all) || \ - panic "cannot build document" - -make DOC_VERSION="$version" INSTALL_DIR="$install_dir/$version" install || \ - panic "cannot install release" - -cp $source_dir/sources/index.html $install_dir - -pushd $install_dir -unlink latest -ln -s $version/html latest -popd diff --git a/tools/build/generate_main.py b/tools/build/generate_main.py deleted file mode 100755 index 0c6a7836..00000000 --- a/tools/build/generate_main.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 -""" -Generates a complete main file that includes all teaching modules. -""" -import typing as tp -from argparse import ArgumentParser -from pathlib import Path - - -def is_placeholder(module_file: Path) -> bool: - """ - Checks if a given module file is only a placeholder. - - Args: - module_file: that should be checked - """ - with open(module_file, "r", encoding="UTF-8") as module: - for line in module.readlines()[:7]: - if line.startswith("This topic is currently under construction"): - return True - - return False - - -def inject_teaching_modules(main_file: tp.TextIO, module_folder: Path) -> None: - """ - Injects '__INCLUDE__(module/file/path.md)' markers into the main file for - all modules found in the given module folder. - - Args: - main_file: where generated input is written to - module_folder: location of the teaching module folder - """ - for module in module_folder.glob('**/*.md'): - if not is_placeholder(module): - main_file.write(f"__INCLUDE__({module})\n\n") - - -def generate_main(raw_main_filepath: Path, output_filepath: Path, - module_folder: Path) -> None: - """ - Generate a complete main file that includes all teaching modules. - - Args: - raw_main: file that will be processed - output_filename: where generated input should be written - module_folder: location of the teaching module folder - """ - with open(raw_main_filepath, "r", encoding="UTF-8") as raw_main, open( - output_filepath, "w", encoding="UTF-8") as generated_main_file: - - for line in raw_main.readlines(): - if line.startswith("INJECT_TEACHING_MODULES"): - inject_teaching_modules(generated_main_file, module_folder) - else: - generated_main_file.write(line) - - -def main(): - """Parse inputs and kick of main generation.""" - parser = ArgumentParser("topic_updater") - parser.add_argument("--raw", - type=Path, - help="The raw main file to process.") - parser.add_argument("--out", - type=Path, - help="Output filename for the generated main.") - parser.add_argument("--module-folder", - type=Path, - help="Path to the module folder.") - - args = parser.parse_args() - - generate_main(args.raw, args.out, args.module_folder) - - -if __name__ == "__main__": - main() diff --git a/tools/build/make_markdown b/tools/build/make_markdown deleted file mode 100755 index c73deace..00000000 --- a/tools/build/make_markdown +++ /dev/null @@ -1,101 +0,0 @@ -#! /usr/bin/env bash - -awk ' -function output(level, old_level, label, basic, main, advanced, text) { - bad_char = "?"; - check_char = "✔️"; - emdash = "—"; - - if (level == 1) { - if (label == "?") { - label = bad_char; - } else { - if (basic == "y") { - basic = sprintf("[%s](#%s-basic)", check_char, label); - } else if (basic == "n") { - basic = emdash; - } - if (main == "y") { - main = sprintf("[%s](#%s-main)", check_char, label); - } else if (main == "n") { - main = emdash; - } - if (advanced == "y") { - advanced = sprintf("[%s](#%s-advanced)", check_char, label); - } else if (advanced == "n") { - advanced = emdash; - } - } - label = sprintf("[%s](#%s)", label, label); - } - - if (level == 1 && old_level < 1) { - printf "\n| ID | Unit | Foundational | Main | Advanced |\n"; - printf "|---|----------|---|---|---|\n"; - } - if (level == 1) { - printf "| [%s] | %s | %s | %s | %s |\n", label, text, basic, main, advanced; - } - if ((level == 0 || level == -1) && old_level > 0) { - printf "\n\n"; - } - if (level == 0) { - printf "\n"; - printf "## %s {#%s}\n", text, label; - } -} - -BEGIN { - old_level = -1; -} - -(NF > 0) { - line = $0; - level = 0; - while (substr(line, level + 1, 1) == "\t") { - ++level; - } - - label = ""; - basic = ""; - main = ""; - advanced = ""; - text = ""; - - if (level == 0) { - - label = $1; - text = substr($0, index($0, $2)); - output(level, old_level, label, basic, main, advanced, text); - - } else if (level == 1) { - - label = $1; - basic = $2; - main = $3; - advanced = $4; - text = substr($0, index($0, $5)); - - output(level, old_level, label, basic, main, advanced, text); - - } - - old_level = level; - -} - -END { - - level = -1; - - label = ""; - basic = ""; - main = ""; - advanced = ""; - text = ""; - - output(level, old_level, label, basic, main, advanced, text); - -} - -' - diff --git a/tools/build/prebuild b/tools/build/prebuild deleted file mode 100755 index 4fccda3b..00000000 --- a/tools/build/prebuild +++ /dev/null @@ -1,19 +0,0 @@ -#! /usr/bin/env bash - -# Terminate with error. -panic() -{ - echo "ERROR: $@" 1>&2 - exit 1 -} - -# Initialize the list of required packages. -packages=() -packages+=(pandoc) -packages+=(texinfo) -packages+=(aspell) -#packages+=(hunspell) - -# Install the packages. -sudo apt-get install -y "${packages[@]}" || \ - panic "unable to install packages" diff --git a/tools/build/preprocessor b/tools/build/preprocessor deleted file mode 100755 index c7903fbe..00000000 --- a/tools/build/preprocessor +++ /dev/null @@ -1,68 +0,0 @@ -#! /usr/bin/env bash - -program_dir="$(dirname "$0")" || exit 1 -program_pathname="$0" - -panic() -{ - echo "ERROR: $@" - exit 1 -} - -usage() -{ - echo "bad usage: $@" - exit 2 -} - -level=0 -version= - -while getopts v:l: opt; do - case $opt in - v) - version="$OPTARG";; - l) - level="$OPTARG";; - \?) - usage - break;; - esac -done -shift $((OPTIND - 1)) - -if [ -z "$version" ]; then - usage "no version specified" -fi -if [ "$level" -gt 10 ]; then - panic "recursion too deep" -fi - -awk -v program="$program_pathname" -v level="$level" -v version="$version" ' - /^__INCLUDE__(.*)/ { - i = length("__INCLUDE__("); - start = i + 1; - while (substr($0, i, 1) != ")") { - ++i; - } - end = i; - path = substr($0, start, end - start); - result = system(sprintf("cat %s | %s -l %d -v %s", path, program, level + 1, version)); - if (result) { - printf "error processing %s\n", path > "/dev/stderr"; - exit 1; - } - next; - } - { - print $0; - } -' - | \ - sed -e 's/__VERSION__/'"$version"'/g' - -status=("${PIPESTATUS[@]}") -for i in "${status[@]}"; do - if [ "$i" -ne 0 ]; then - panic "preprocessor failed" - fi -done diff --git a/tools/mgmt_tools/gen_readme.py b/tools/mgmt_tools/gen_readme.py deleted file mode 100755 index bd31dc40..00000000 --- a/tools/mgmt_tools/gen_readme.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python3 -""" -Small tool to generate a Readme.md file as an overview of all teaching modules -and topics. - -> ./gen_readme.py -""" -from pathlib import Path -from typing import List -import re - -FOLDER_SKIP_LIST = ['.git', '.github', '.mypy_cache', "__pycache__", 'tools'] -README_HEADER = "# SG20: Teaching Topics" -DO_NOT_EDIT_WARNING = """ -""" - - -def create_markdown_anchor(header: str) -> str: - """ - Creates an markdown anchor for a header. - - >>> create_markdown_anchor("C++ compilation model") - '(#c-compilation-model)' - >>> create_markdown_anchor("# C++ compilation model") - '(#c-compilation-model)' - """ - header_anchor = header.lower() - header_anchor = header_anchor.lstrip("# ") - header_anchor = header_anchor.replace(' ', '-') - header_anchor = header_anchor.replace('+', '') - return f"(#{header_anchor})" - - -def create_header_link(header: str) -> str: - """ - Creates a link for the specified header. - - >>> create_header_link("# My header") - '[My header](#my-header)' - """ - return f"[{header.lstrip('# ')}]{create_markdown_anchor(header)}" - - -class TeachingTopic: - """Abstraction for a teaching topic.""" - - LINK_REGEX = re.compile(r".*\((?P.*)\)") - - def __init__(self, name: str, path: Path) -> None: - self.__name = name - self.__path = TeachingTopic.exchange_path_with_orignal_topic_file_path( - path) - - @property - def name(self) -> str: - """Name of the topic.""" - return self.__name - - @property - def path(self) -> Path: - """Path to the topic file.""" - return self.__path - - @staticmethod - def exchange_path_with_orignal_topic_file_path(path: Path) -> Path: - """ - For topics that occure in more than one module, all except for the - original topic file are placeholders that forward the reader to the - original file. To make navigating easier, we automatically exchange the - path of a topic file with the original path, so users can get directly - to the desired file. - """ - with open(path, "r") as topic_file: - first_line = topic_file.readline() - if first_line.lower().startswith("see "): - match = TeachingTopic.LINK_REGEX.search(first_line) - if match: - # Strip leading ../ because we are at the top level dir - return Path(match.group("path").lstrip("./")) - - return path - - -class TeachingModule: - """Abstraction for a teaching module folder.""" - def __init__(self, title: str, path: Path, - topics: List[TeachingTopic]) -> None: - self.__title = title - self.__path = path - self.__topics = topics - - @property - def title(self) -> str: - """Title of the teaching module.""" - return self.__title - - @property - def path(self) -> Path: - """Path to the module folder.""" - return self.__path - - @property - def topics(self) -> List[TeachingTopic]: - """List of teaching topics.""" - return self.__topics - - @staticmethod - def convert_folder_name_to_title(folder_name: str) -> str: - """Converts a module folder name to the corresponding title. - - >>> TeachingModule.convert_folder_name_to_title("user-defined-types") - 'User-defined types' - >>> TeachingModule.convert_folder_name_to_title("functions") - 'Functions' - >>> TeachingModule.convert_folder_name_to_title("error-handling") - 'Error handling' - """ - # Special module names where we need specific name replacements - special_cases = { - "meta-error-handling": "Meta-error handling", - "compile-time-programming": "Compile-time programming", - "user-defined-types": "User-defined types", - "object-model": "C++ object model" - } - title: str = "" - if folder_name in special_cases: - title = special_cases[folder_name] - else: - title = folder_name - title = title.replace("-", " ") - - title = title.capitalize() - return title - - @staticmethod - def parse_module(module_dir: Path) -> 'TeachingModule': - """Parse `TeachingModule` from file path.""" - module_title = TeachingModule.convert_folder_name_to_title( - module_dir.name) - - teaching_topics: List[TeachingTopic] = [] - for topic_path in module_dir.iterdir(): - teaching_topics.append(TeachingTopic(topic_path.stem, topic_path)) - - return TeachingModule(module_title, module_dir, teaching_topics) - - -def create_module_title_with_header_link(module: TeachingModule) -> str: - """ - Creates a module title with string with a link to the corresponding header - anchor. - - >>> create_module_title_with_header_link(TeachingModule(\ - "C++ compilation model", Path("."),["Foo", "Bar"])) - '[C++ compilation model](#c-compilation-model)' - """ - return create_header_link(module.title) - - -def create_topic_path_link(topic: TeachingTopic) -> str: - """ - Creates a link for the specified topic. - - >>> create_topic_path_link(TeachingTopic(\ - "Constant objects",\ - Path("./object-model/constant-objects.md"))) - '[Constant objects](object-model/constant-objects.md)' - """ - return f"[{topic.name}]({str(topic.path)})" - - -def create_topic_list_item(topic: TeachingTopic) -> str: - """Creates a list item for a topic. - - >>> create_topic_list_item(TeachingTopic(\ - "Constant objects",\ - Path("./object-model/constant-objects.md"))) - '* [Constant objects](object-model/constant-objects.md)\\n' - """ - return f"* {create_topic_path_link(topic)}\n" - - -def readme_generator_driver() -> None: - """ - Run the Readme.md generation process. - """ - readme_filename = "Readme.md" - repo_root = Path('sources/modules/') - teaching_modules: List[TeachingModule] = [] - - for directory in filter( - lambda x: (x.is_dir() and x.name not in FOLDER_SKIP_LIST), - repo_root.iterdir()): - teaching_modules.append(TeachingModule.parse_module(directory)) - - with open(readme_filename, 'w') as readme_file: - readme_file.write(DO_NOT_EDIT_WARNING + "\n") - readme_file.write(README_HEADER + "\n\n") - - # Print all module links - readme_file.write("## Modules:\n") - for module in teaching_modules: - readme_file.write( - f"* {create_module_title_with_header_link(module)}\n") - - readme_file.write("\n") - - # Print teaching topics one module at a time - for module in teaching_modules: - readme_file.write(f"### {module.title}\n") - for topic in module.topics: - readme_file.write(create_topic_list_item(topic)) - readme_file.write("\n") - - -if __name__ == "__main__": - readme_generator_driver() diff --git a/tools/mgmt_tools/topic_updater.py b/tools/mgmt_tools/topic_updater.py deleted file mode 100755 index 8fadf138..00000000 --- a/tools/mgmt_tools/topic_updater.py +++ /dev/null @@ -1,416 +0,0 @@ -#!/usr/bin/env python3 -""" -Small tool for generating and fixing teaching topics. - -Verify if the layout of all topics matches the skeleton. -> ./topic_updater.py --check - -Update all topic files according to the skeleton. -> ./topic_updater.py --update - -Update a specific topic file according to the skeleton. -> ./topic_updater.py --update functions/user-defined-literals.md -""" - -import os -import typing as tp -from argparse import ArgumentParser -from copy import copy -from pathlib import Path - - -def _cli_yn_choice(question: str, default: str = 'y') -> bool: - """Ask the user to make a y/n decision on the cli.""" - choices = 'Y/n' if default.lower() in ('y', 'yes') else 'y/N' - choice: str = str( - input("{message} ({choices}) ".format(message=question, - choices=choices))) - values: tp.Union[tp.Tuple[str, str], - tp.Tuple[str, str, - str]] = ('y', 'yes', - '') if choices == 'Y/n' else ('y', - 'yes') - return choice.strip().lower() in values - - -class SectionHeading: - """ A header of section in the topic document. """ - def __init__(self, title_text: str) -> None: - self.__title_text = title_text - self.__meta_text: tp.List[str] = [] - - @property - def header_text(self) -> str: - """Text of the section header.""" - return self.__title_text - - @property - def meta_text(self) -> tp.List[str]: - """Meta text of the section, represented in italics.""" - return self.__meta_text - - def append_meta_text(self, meta_text_line: str) -> None: - """ - Append a line to the meta text section of this section heading. - - Args: - meta_text_line: new meta text line to append - """ - self.__meta_text.append(meta_text_line) - - def convert_meta_text_to_lines(self) -> tp.List[str]: - """ - Convert the sections meta text into separate lines for the document. - This does not include the header part because some headers contain user - specific text, which is not traced in the Skeleton. - """ - heading_lines = [] - heading_lines.append(os.linesep) - - heading_lines.extend(self.meta_text) - # Guarantee exactly one empty line after meta text - heading_lines[-1] = heading_lines[-1].rstrip() + os.linesep * 2 - - return heading_lines - - def __str__(self) -> str: - heading_text = f"{self.header_text}\n{''.join(self.meta_text)}" - return heading_text - - -class Skeleton: - """ - The topic skeleton which defines the layout and meta text of a topic file. - """ - def __init__(self, skeleton_file_path: Path) -> None: - self.__skeleton_file_path = skeleton_file_path - self.__headings: tp.List[SectionHeading] = [] - self.__parse_headings() - - @property - def headings(self) -> tp.List[SectionHeading]: - """All headings in this skeleton.""" - return self.__headings - - def lookup_heading(self, start_heading_line: str) -> SectionHeading: - """ - Looks up a heading from the skeleton. - - Args: - start_heading_line: start of full string of the heading line - - Returns: the section heading that starts like the heading line - """ - for heading in self.headings: - if start_heading_line.lower().startswith( - heading.header_text.split(":")[0].lower()): - return heading - raise LookupError( - f"Could not find heading that starts with: {start_heading_line}") - - def get_title_heading(self) -> SectionHeading: - """ The Title heading of the document. """ - if not self.headings[0].header_text.startswith("## "): - raise AssertionError( - "First heading in the skeleton was not the title.") - return self.headings[0] - - def check_if_topic_file_matches(self, topic_file: tp.TextIO) -> bool: - """ - Checks if the topic file headings and meta text matches the skeleton. - Prints the differences between the topic file and the skeleton, if a - miss mach is detected. - - Args: - topic_file: the topic markdown file to update - - Returns: `True` if the topic matches, otherwise, `False` - """ - current_heading_iter = iter(self.headings) - current_heading = None - processing_meta_text = False - expected_meta_text: tp.List[str] = [] - - for line in topic_file.readlines(): - line = line.rsplit("{#")[0] # ignore anchors - - if line.startswith("This topic is currently under construction"): - return True - if line.startswith("##"): - if current_heading and expected_meta_text: - print("Missing italics detected:") - print(f"Expected: {expected_meta_text[0]}") - return False - - current_heading = next(current_heading_iter) - expected_meta_text = copy( - self.lookup_heading(current_heading.header_text).meta_text) - processing_meta_text = False - - # Check if the required section headings are present - if line.startswith("###") and current_heading: - if current_heading.header_text.split(":")[0] != line.split( - ":")[0].strip(): - print("Found wrong section title:") - print(f"Found:\n{line.strip()}") - print(f"Expected:\n{current_heading.header_text}") - return False - - # Check if the correct meta text is below the section heading - if line.startswith("_") or processing_meta_text: - if not expected_meta_text: - print("Did not expect further italics but found:") - print(line) - return False - - if line == expected_meta_text[0]: - processing_meta_text = not line.strip().endswith("_") - expected_meta_text.pop(0) - else: - print("Found italics text did not match the skeleton:") - print(f"Found:\n{line}") - print(f"Expected:\n{expected_meta_text[0]}") - return False - - return True - - def update_topic_meta_text(self, topic_file: tp.TextIO) -> tp.List[str]: - """ - Create updates of the meta text for a topic file according to this - skeleton. - - Args: - topic_file: the topic markdown file to update - - Returns: updated topic lines - """ - updated_topic_lines = [] - skeleton_headings_iter = iter(self.headings) - - updated_topic_lines.extend( - self.__process_existing_topic_content(topic_file, - skeleton_headings_iter)) - - # Add missing section headings at the end - updated_topic_lines.extend( - self.__get_remaining_section_headings(skeleton_headings_iter)) - - # Remove excessive newlines - updated_topic_lines[-1] = updated_topic_lines[-1].rstrip() + os.linesep - - return updated_topic_lines - - def __process_existing_topic_content( - self, topic_file: tp.TextIO, - skeleton_headings_iter: tp.Iterator[SectionHeading] - ) -> tp.List[str]: - """ - This method checks that all heading related lines in the topic file - correspond correctly to the skeleton. If lines are missing, the user is - asked if the missing heading should be added. - - Args: - topic_file: the topic markdown file to update - skeleton_headings_iter: iterator that points to the next expected - topic heading - - Returns: existing topic lines, where headings were updated according to - the skeleton - """ - updated_topic_lines = [] - emitting_doc_text = True - - for line in topic_file.readlines(): - if line.startswith("###"): - next_heading = next(skeleton_headings_iter) - current_heading = self.lookup_heading(line.split(":")[0]) - - # Add headers that are completely missing - while (current_heading.header_text != - next_heading.header_text): - print(f"Could not find section " - f"({next_heading.header_text}) before section " - f"({current_heading.header_text}).") - if _cli_yn_choice("Should I insert it before?"): - updated_topic_lines.append(next_heading.header_text) - updated_topic_lines.extend( - next_heading.convert_meta_text_to_lines()) - - next_heading = next(skeleton_headings_iter) - - emitting_doc_text = False - - # Write out heading - updated_topic_lines.append(line) - updated_topic_lines.extend( - current_heading.convert_meta_text_to_lines()) - - elif line.startswith("##"): - # Verify that the title heading has correct meta text - emitting_doc_text = False - next_heading = next(skeleton_headings_iter) - updated_topic_lines.append(line) - updated_topic_lines.extend( - self.get_title_heading().convert_meta_text_to_lines()) - elif line.startswith("_") or line.strip().endswith("_"): - # Ignore meta lines - # Meta lines are not allowed to contain modifications by the - # topic writer and are always inserted with the title heading - # from the skeleton. - continue - elif emitting_doc_text or line != "\n": - # Skip new lines if we aren't emitting normal document text - emitting_doc_text = True - updated_topic_lines.append(line) - - return updated_topic_lines - - @staticmethod - def __get_remaining_section_headings( - skeleton_headings_iter: tp.Iterator[SectionHeading] - ) -> tp.List[str]: - """ - Returns a list of all `SectionHeading`s that are still missing and - should be added at the end of the topic. - - Args: - skeleton_headings_iter: iterator that points to the next expected - topic heading - Returns: missing topic lines, which are not present and have not been - added up to now - """ - missing_headings: tp.List[str] = [] - try: - while True: - next_heading = next(skeleton_headings_iter) - missing_headings.append(next_heading.header_text + os.linesep) - missing_headings.extend( - next_heading.convert_meta_text_to_lines()) - except StopIteration: - pass - - return missing_headings - - def __parse_headings(self) -> None: - with open(self.__skeleton_file_path, "r") as skeleton_file: - for line in skeleton_file.readlines(): - if line.startswith("#"): - self.headings.append(SectionHeading(line.strip())) - elif line.startswith("_") or line.strip().endswith("_"): - if not self.headings: - raise AssertionError( - "Found italics skeleton text before first heading." - ) - self.headings[-1].append_meta_text(line) - - def __str__(self) -> str: - skeleton_text = "" - for heading in self.headings: - skeleton_text += str(heading) + "\n" - return skeleton_text - - -def check_skeletons(skeleton: Skeleton, topic_paths: tp.List[Path]) -> bool: - """ - Check of the topics files match the skeleton. - - Args: - skeleton: base skeleton to compare the topics against - topic_paths: list of paths to topic files - - Returns: True, if all topic files matched the skeleton - """ - all_files_matched = True - for topic_path in topic_paths: - with open(topic_path, "r") as topic_file: - print(f"Checking: {topic_path}") - if skeleton.check_if_topic_file_matches(topic_file): - print(" └─> All meta-text matched the skeleton.") - else: - print(" └─> Errors where found!") - all_files_matched = False - - return all_files_matched - - -def update_skeletons(skeleton: Skeleton, topic_paths: tp.List[Path]) -> None: - """ - Update the topics files to match the skeleton. - - Args: - skeleton: base skeleton, used as a ground truth - topic_paths: list of paths to topic files - """ - for path in topic_paths: - updated_topic_content = [] - with open(path, "r") as topic_file: - updated_topic_content = skeleton.update_topic_meta_text(topic_file) - - if updated_topic_content: - # Write update content to topic file - with open(path, "w") as topic_file: - for line in updated_topic_content: - topic_file.write(line) - - -def main() -> None: - """ Driver function for the topic fixer tool. """ - parser = ArgumentParser("topic_updater") - parser.add_argument("--check", - action="store_true", - default=False, - help="Check if the topic files match the skeleton.") - parser.add_argument("--update", - action="store_true", - default=False, - help="Update topic files according to the skeleton.") - parser.add_argument("--skeleton-file", - type=Path, - default=Path("skeleton.md"), - help="Provide alternative skeleton file.") - parser.add_argument("topic_paths", - nargs="*", - default=None, - type=Path, - help="List of paths to topic files, if no paths " - "are provided all topic files are used.") - - args = parser.parse_args() - - if not args.skeleton_file.exists(): - print(f"Could not find skeleton file {args.skeleton_file}") - return - skeleton = Skeleton(args.skeleton_file) - - if not args.topic_paths: - - def exclude_non_topic_files(path: Path) -> bool: - excluded_files = ["skeleton.md", "Readme.md"] - excluded_folders = [".github", "tools"] - for exclude_folder in excluded_folders: - if str(path).startswith(exclude_folder): - return False - return path.name not in excluded_files - - topic_paths = list( - filter(exclude_non_topic_files, - Path("sources/modules/").glob("**/*.md"))) - else: - topic_paths = args.topic_paths - - # Verify that all topic paths exist - for topic_path in topic_paths: - if not topic_path.exists(): - print(f"Could not find topic file {topic_path}") - return - - if args.check: - check_skeletons(skeleton, topic_paths) - elif args.update: - update_skeletons(skeleton, topic_paths) - else: - parser.print_help() - - -if __name__ == "__main__": - main() diff --git a/tools/pandoc_filters/meta_vars.lua b/tools/pandoc_filters/meta_vars.lua deleted file mode 100644 index 0a39558a..00000000 --- a/tools/pandoc_filters/meta_vars.lua +++ /dev/null @@ -1,19 +0,0 @@ -local vars = {} - -function get_vars (meta) - for k, v in pairs(meta) do - if type(v) == 'table' and v.t == 'MetaInlines' then - vars["%" .. k .. "%"] = {table.unpack(v)} - end - end -end - -function replace (el) - if vars[el.text] then - return pandoc.Span(vars[el.text]) - else - return el - end -end - -return {{Meta = get_vars}, {Str = replace}} diff --git a/tools/pandoc_filters/spellcheck.lua b/tools/pandoc_filters/spellcheck.lua deleted file mode 100644 index dd723cb4..00000000 --- a/tools/pandoc_filters/spellcheck.lua +++ /dev/null @@ -1,70 +0,0 @@ --- lua filter for spell checking: requires 'aspell'. --- Copyright (C) 2017-2020 John MacFarlane, released under MIT license - -local text = require('text') -local words = {} -local deflang - -local function add_to_dict(lang, t) - if not words[lang] then - words[lang] = {} - end - if not words[lang][t] then - words[lang][t] = (words[lang][t] or 0) + 1 - end -end - -local function get_deflang(meta) - deflang = (meta.lang and meta.lang[1] and meta.lang[1].c) or 'en' - -- the following is better but won't work in pandoc 2.0.6. - -- it requires pandoc commit ecc46e229fde934f163d1f646383d24bfe2039e1: - -- deflang = (meta.lang and pandoc.utils.stringify(meta.lang)) or 'en' - return {} -- eliminate meta so it doesn't get spellchecked -end - -local function run_spellcheck(lang) - local keys = {} - local wordlist = words[lang] - for k,_ in pairs(wordlist) do - keys[#keys + 1] = k - end - local inp = table.concat(keys, '\n') - local outp = pandoc.pipe('aspell_frontend', {'list','-l',lang}, inp) - for w in string.gmatch(outp, "([%S]+)\n") do - io.write(w) - if lang ~= deflang then - io.write("\t[" .. lang .. "]") - end - io.write("\n") - end -end - -local function results(el) - pandoc.walk_block(pandoc.Div(el.blocks), {Str = function(e) add_to_dict(deflang, e.text) end}) - for lang,v in pairs(words) do - run_spellcheck(lang) - end - os.exit(0) -end - -local function checkstr(el) - add_to_dict(deflang, el.text) -end - -local function checkspan(el) - local lang = el.attributes.lang - if not lang then return nil end - pandoc.walk_inline(el, {Str = function(e) add_to_dict(lang, e.text) end}) - return {} -- remove span, so it doesn't get checked again -end - -local function checkdiv(el) - local lang = el.attributes.lang - if not lang then return nil end - pandoc.walk_block(el, {Str = function(e) add_to_dict(lang, e.text) end}) - return {} -- remove div, so it doesn't get checked again -end - -return {{Meta = get_deflang}, - {Div = checkdiv, Span = checkspan}, - {Str = function(e) add_to_dict(deflang, e.text) end, Pandoc = results}} diff --git a/tools/pytest.ini b/tools/pytest.ini deleted file mode 100644 index 6a196030..00000000 --- a/tools/pytest.ini +++ /dev/null @@ -1,4 +0,0 @@ -[pytest] -testpaths = tests -addopts = --doctest-modules --doctest-continue-on-failure -pythonpath = . diff --git a/tools/requirements.txt b/tools/requirements.txt deleted file mode 100644 index 7282dee8..00000000 --- a/tools/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest>=7 -mock diff --git a/tools/tests/TEST_INPUTS/fix_wrong_sections.md b/tools/tests/TEST_INPUTS/fix_wrong_sections.md deleted file mode 100644 index ae036a0a..00000000 --- a/tools/tests/TEST_INPUTS/fix_wrong_sections.md +++ /dev/null @@ -1,24 +0,0 @@ -## Main Title - -_Skeleton instructions are typeset in italic text._ - -### Section with user content: provided by the user - -_ Example section where user text is in the header _ - -### Missing mid section - -_ This section could be missing in the middle of the topics _ - -### Italics text should be updated - -_ Wrong old italics text. _ - -### Meta text with line breaks - -_ Some text here -some after the line break _ - -### Missing end section - -_ This section could be missing at the end of the document _ diff --git a/tools/tests/TEST_INPUTS/missing_sections.md b/tools/tests/TEST_INPUTS/missing_sections.md deleted file mode 100644 index b10a759c..00000000 --- a/tools/tests/TEST_INPUTS/missing_sections.md +++ /dev/null @@ -1,17 +0,0 @@ -## Main Title - -_Skeleton instructions are typeset in italic text._ - -### Section with user content: provided by the user - -_ Example section where user text is in the header _ - -### Italics text should be updated - -_ Updated italics text. _ - -### Meta text with line breaks - -_ Some text here -some after the line break _ - diff --git a/tools/tests/TEST_INPUTS/test_injectable_main.md b/tools/tests/TEST_INPUTS/test_injectable_main.md deleted file mode 100644 index 6f960b12..00000000 --- a/tools/tests/TEST_INPUTS/test_injectable_main.md +++ /dev/null @@ -1 +0,0 @@ -INJECT_TEACHING_MODULES_HERE diff --git a/tools/tests/TEST_INPUTS/test_modules/test_empty_module.md b/tools/tests/TEST_INPUTS/test_modules/test_empty_module.md deleted file mode 100644 index 1fac8ed5..00000000 --- a/tools/tests/TEST_INPUTS/test_modules/test_empty_module.md +++ /dev/null @@ -1,84 +0,0 @@ -## Test: some empty test module - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -### Overview - -_Provides a short natural language abstract of the module’s contents._ -_Specifies the different levels of teaching._ - ------------------------------------------------------------------------- -Level Objective ------------------ ------------------------------------------------------ -Foundational --- - -Main --- - -Advanced --- - ------------------------------------------------------------------------- - -### Motivation - -_Why is this important?_ -_Why do we want to learn/teach this topic?_ - -### Topic introduction - -_Very brief introduction to the topic._ - -### Foundational: Using * - -#### Background/Required Knowledge - -A student: - - -#### Student outcomes - -_A list of things "a student should be able to" after the curriculum._ -_The next word should be an action word and testable in an exam._ -_Max 5 items._ - -A student should be able to: - -1. -2. -3. -4. -5. - -#### Caveats - -_This section mentions subtle points to understand, like anything resulting in -implementation-defined, unspecified, or undefined behavior._ - -#### Points to cover - -_This section lists important details for each point._ - -### Main: implementing * - -#### Background/Required Knowledge - -* All of the above. - -#### Student outcomes - -A student should be able to: - -1. -2. -3. -4. -5. - -#### Caveats - -#### Points to cover - -### Advanced - -_These are important topics that are not expected to be covered but provide -guidance where one can continue to investigate this topic in more depth._ diff --git a/tools/tests/TEST_INPUTS/test_modules/test_placeholder.md b/tools/tests/TEST_INPUTS/test_modules/test_placeholder.md deleted file mode 100644 index b1800e64..00000000 --- a/tools/tests/TEST_INPUTS/test_modules/test_placeholder.md +++ /dev/null @@ -1,6 +0,0 @@ -## Test: placeholder - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -This topic is currently under construction and will soon be filled with information :) diff --git a/tools/tests/TEST_INPUTS/test_modules/test_wrong_placeholder.md b/tools/tests/TEST_INPUTS/test_modules/test_wrong_placeholder.md deleted file mode 100644 index 069670c4..00000000 --- a/tools/tests/TEST_INPUTS/test_modules/test_wrong_placeholder.md +++ /dev/null @@ -1,6 +0,0 @@ -## Test: placeholder - -_Skeleton descriptions are typeset in italic text,_ -_so please don't remove these descriptions when editing the topic._ - -Wrong marker text :( diff --git a/tools/tests/TEST_INPUTS/test_skeleton.md b/tools/tests/TEST_INPUTS/test_skeleton.md deleted file mode 100644 index 972227f4..00000000 --- a/tools/tests/TEST_INPUTS/test_skeleton.md +++ /dev/null @@ -1,24 +0,0 @@ -## Main Title - -_Skeleton instructions are typeset in italic text._ - -### Section with user content: provided by the user - -_ Example section where user text is in the header _ - -### Missing mid section - -_ This section could be missing in the middle of the topics _ - -### Italics text should be updated - -_ Updated italics text. _ - -### Meta text with line breaks - -_ Some text here -some after the line break _ - -### Missing end section - -_ This section could be missing at the end of the document _ diff --git a/tools/tests/TEST_INPUTS/user_content_heading_topic.md b/tools/tests/TEST_INPUTS/user_content_heading_topic.md deleted file mode 100644 index 679ed99d..00000000 --- a/tools/tests/TEST_INPUTS/user_content_heading_topic.md +++ /dev/null @@ -1,28 +0,0 @@ -## Main Title - -_Skeleton instructions are typeset in italic text._ - -### Section with user content: This is provided by the user - -_ Example section where user text is in the header _ - -Users can add different content here. - -
- -### Missing mid section - -_ This section could be missing in the middle of the topics _ - -### Italics text should be updated - -_ Updated italics text. _ - -### Meta text with line breaks - -_ Some text here -some after the line break _ - -### Missing end section - -_ This section could be missing at the end of the document _ diff --git a/tools/tests/generate_main_test.py b/tools/tests/generate_main_test.py deleted file mode 100644 index 110c412c..00000000 --- a/tools/tests/generate_main_test.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -""" - -from pathlib import Path -import unittest -import io - -import build.generate_main as gm - -TEST_INPUTS = Path("tests/TEST_INPUTS/") - - -def _trim_include(line: str) -> str: - return line[12:-1] - - -class TestMainGeneration(unittest.TestCase): - """ - Tests the main generator functionallity that is used to automatically - generate a complete main file with all modules. - """ - def test_is_placeholder_actual_placeholder(self): - """Check is_placeholder correctly identifies a placeholder file.""" - self.assertTrue( - gm.is_placeholder(TEST_INPUTS / "test_modules" / - "test_placeholder.md")) - - def test_is_placeholder_does_not_identify_other_files(self): - """Check is_placeholder does not identifies other files as - placeholders.""" - self.assertFalse( - gm.is_placeholder(TEST_INPUTS / "test_modules" / - "test_wrong_placeholder.md")) - - def test_that_inject_modules_correctly_injects_includes(self): - """ - Checks that `inject_teaching_modules` correctly injects all available - teaching modules into the given file. - """ - output_buffer = io.StringIO() - gm.inject_teaching_modules(output_buffer, TEST_INPUTS / "test_modules") - - generated_include_lines = [ - s for s in output_buffer.getvalue().splitlines() if s - ] - - for include_line in generated_include_lines: - self.assertTrue(include_line.startswith("__INCLUDE__(")) - self.assertTrue(include_line.endswith(")")) - - generated_include_lines = sorted( - list(map(_trim_include, generated_include_lines))) - - self.assertEqual( - generated_include_lines[0], - "tests/TEST_INPUTS/test_modules/test_empty_module.md") - self.assertEqual( - generated_include_lines[1], - "tests/TEST_INPUTS/test_modules/test_wrong_placeholder.md") diff --git a/tools/tests/topic_updater_test.py b/tools/tests/topic_updater_test.py deleted file mode 100644 index 063e3a01..00000000 --- a/tools/tests/topic_updater_test.py +++ /dev/null @@ -1,364 +0,0 @@ -""" -Testing module for the topic_updater script. This modules tests whether the -abstractions, SectionHeading, Skeleton, which are used in the script correctly -work. -""" -from itertools import dropwhile -from pathlib import Path -import copy -import os -import unittest - -import mock - -import mgmt_tools.topic_updater as tu - -TEST_INPUTS = Path("tests/TEST_INPUTS/") - - -class TestSectionHeading(unittest.TestCase): - """ - Tests the section heading class, which represents a specific secion heading - in a topic markdown. - """ - @classmethod - def setUpClass(cls): - """ Setup example section header. """ - cls.section_title = "## Section Title" - cls.test_meta_text_line0 = "_ Some meta text _" + os.linesep - cls.test_meta_text_line1 = "_ Another line meta text _" + os.linesep - - cls.new_heading = tu.SectionHeading(cls.section_title) - cls.new_heading.append_meta_text(cls.test_meta_text_line0) - - def test_basic_construction(self): - """ Checks if we setup the basic section header correclty. """ - new_heading = copy.deepcopy(self.new_heading) - - self.assertEqual(new_heading.header_text, self.section_title) - self.assertEqual(new_heading.meta_text, [self.test_meta_text_line0]) - - new_heading.append_meta_text(self.test_meta_text_line1) - - self.assertEqual( - new_heading.meta_text, - [self.test_meta_text_line0, self.test_meta_text_line1]) - - def test_meta_text_to_line_conversion(self): - """ Checks if we correctly generate meta text. """ - new_heading = copy.deepcopy(self.new_heading) - new_heading.append_meta_text(self.test_meta_text_line1) - - meta_text_lines = new_heading.convert_meta_text_to_lines() - - self.assertEqual(meta_text_lines[0], os.linesep, - "First line should be only a linesep.") - self.assertEqual(meta_text_lines[1], self.test_meta_text_line0) - self.assertEqual( - meta_text_lines[2], self.test_meta_text_line1 + os.linesep, - "The last meta line should have an additional line separator") - - -class TestSkeleton(unittest.TestCase): - """ - Tests the skeleton class which loads the topic skeleton from a file and - parses it. - """ - @classmethod - def setUpClass(cls): - """ Setup small test skeleton which contains all edge cases. """ - cls.test_skeleton = tu.Skeleton(TEST_INPUTS / "test_skeleton.md") - - def test_actual_skeleton_parse(self): - """ - Checks that we can fully parse the actual skeleton. - """ - offset_to_main_folder = "../../../" - actual_skeleton = tu.Skeleton(TEST_INPUTS / offset_to_main_folder / - "skeleton.md") - - self.assertEqual(actual_skeleton.get_title_heading().header_text, - "## Module name: topic name") - headings = list( - map(lambda heading: heading.header_text, actual_skeleton.headings)) - self.assertEqual(headings[0], "## Module name: topic name") - self.assertEqual(headings[1], "### Overview") - - self.assertEqual(headings[-2], "#### Points to cover") - self.assertEqual(headings[-1], "### Advanced") - - def test_heading_lookup(self): - """ - Checks if we can lookup different section headings in the skeleton. - """ - section_with_user_content = self.test_skeleton.lookup_heading( - "### Section with user content:") - missing_mid = self.test_skeleton.lookup_heading( - "### Missing mid section") - - self.assertEqual( - section_with_user_content.header_text, - "### Section with user content: provided by the user") - self.assertEqual( - section_with_user_content.meta_text[0].rstrip(), - "_ Example section where user text is in the header _") - - self.assertEqual(missing_mid.header_text, "### Missing mid section") - self.assertEqual( - missing_mid.meta_text[0].rstrip(), - "_ This section could be missing in the middle of the topics _") - - def test_heading_lookup_wrong_capitalization(self): - """ - Checks if we can lookup different section headings in the skeleton, - even if the original text is wrongly capitialized. - """ - wrong_upper_case_heading = self.test_skeleton.lookup_heading( - "### Section with User content:") - wrong_lower_case_heading = self.test_skeleton.lookup_heading( - "### missing mid section") - - self.assertEqual( - wrong_upper_case_heading.header_text, - "### Section with user content: provided by the user") - self.assertEqual( - wrong_upper_case_heading.meta_text[0].rstrip(), - "_ Example section where user text is in the header _") - - self.assertEqual(wrong_lower_case_heading.header_text, - "### Missing mid section") - self.assertEqual( - wrong_lower_case_heading.meta_text[0].rstrip(), - "_ This section could be missing in the middle of the topics _") - - def test_title_heading_lookup(self): - """ - Checks if we get the correct title heading from the test skeleton. - """ - self.assertEqual(self.test_skeleton.get_title_heading().header_text, - "## Main Title") - self.assertEqual( - self.test_skeleton.get_title_heading().meta_text[0], - "_Skeleton instructions are typeset in italic text._" + os.linesep) - - def test_that_meta_text_with_linebreaks_inbetween_meta_markers_parse(self): - """ - Checks that we correctly parse meta text that stretches over multiple - lines. - """ - multi_line_meta_heading = self.test_skeleton.lookup_heading( - "### Meta text with line breaks") - - self.assertEqual(multi_line_meta_heading.meta_text[0], - "_ Some text here" + os.linesep) - self.assertEqual(multi_line_meta_heading.meta_text[1], - "some after the line break _" + os.linesep) - - -class TestSkeletonTopicUpdates(unittest.TestCase): - """ - Test skeleton topic update function. This test tries to cover different - scenarios that could occure during topic updates and verifies that we - handle them correctly. - """ - @classmethod - def setUpClass(cls): - """ Setup small test skeleton which contains all edge cases. """ - cls.test_skeleton = tu.Skeleton(TEST_INPUTS / "test_skeleton.md") - - def test_not_to_override_user_provided_heading_text(self): - """ - Checks that the update method does not override user provided text, - which is part of some section headings. - """ - topic_file_path = TEST_INPUTS / "user_content_heading_topic.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - start_test_scope_lines = list( - dropwhile( - lambda line: not line.startswith( - "### Section with user content:"), - updated_topic_lines)) - - self.assertTrue( - start_test_scope_lines[0].endswith( - " This is provided by the user" + os.linesep), - "User provided content was modified") - - def test_that_we_dont_override_user_text_in_sections(self): - """ - Checks that when we don't change user written text in section when - updating the topic. - """ - topic_file_path = TEST_INPUTS / "user_content_heading_topic.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - start_test_scope_lines = list( - dropwhile( - lambda line: not line.startswith( - "Users can add different content here"), - updated_topic_lines)) - - self.assertTrue( - start_test_scope_lines[0].startswith( - "Users can add different content here."), - "User provided content was modified") - self.assertTrue(start_test_scope_lines[1].startswith(""), - "User provided content was modified") - self.assertTrue(start_test_scope_lines[2].startswith("
"), - "User provided content was modified") - - @mock.patch('mgmt_tools.topic_updater._cli_yn_choice') - def test_if_missing_section_gets_added_to_the_end(self, mock_cli_yn): - """ - Checks if a section that is missing at the end of the topic file gets - automatically added. - """ - mock_cli_yn.return_value = True - topic_file_path = TEST_INPUTS / "missing_sections.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - self.assertEqual( - updated_topic_lines[-3].rstrip(), "### Missing end section", - "Missing section was not added to the end of the file.") - self.assertEqual( - updated_topic_lines[-1].rstrip(), - "_ This section could be missing at the end of the document _") - - @mock.patch('mgmt_tools.topic_updater._cli_yn_choice') - def test_if_missing_section_gets_added_in_the_middle(self, mock_cli_yn): - """ - Checks if a section that is missing in the middle of the topic file - gets added if the user wants it. The test assumes the user supplies - yes as an answer. - """ - mock_cli_yn.return_value = True - topic_file_path = TEST_INPUTS / "missing_sections.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - # Reduces the topic lines to only contain sections and removes all - # lines before the test scope, i.e., the section before the missing - # section. - start_test_scope_lines = list( - filter( - lambda line: line.startswith("###"), - dropwhile( - lambda line: not line.startswith( - "### Section with user content"), - iter(updated_topic_lines)))) - - # Verify that the previous section is correct - self.assertTrue( - start_test_scope_lines[0].startswith( - "### Section with user content"), - "The section before the added missing section is wrong.") - - # Verify the section was inserted - self.assertEqual( - start_test_scope_lines[1].rstrip(), "### Missing mid section", - "The missing section was not inserted correctly.") - - # Verify the next section is correct - self.assertTrue( - start_test_scope_lines[2].startswith( - "### Italics text should be updated"), - "The section after the added missing section is wrong.") - - def test_that_meta_text_gets_updated(self): - """ - Checks that meta text in the topic gets updated according to the - skeleton. - """ - topic_file_path = TEST_INPUTS / "fix_wrong_sections.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - topic_lines_starting_from_italics_section = list( - dropwhile( - lambda line: not line.startswith( - "### Italics text should be updated"), - iter(updated_topic_lines))) - self.assertEqual( - topic_lines_starting_from_italics_section[0].rstrip(), - "### Italics text should be updated", - "Could not find italics section.") - self.assertEqual( - topic_lines_starting_from_italics_section[2].rstrip(), - "_ Updated italics text. _") - - def test_topic_does_not_end_in_empty_line(self): - """ - Checks that the update topic lines do not end with and empty line. - """ - topic_file_path = TEST_INPUTS / "user_content_heading_topic.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - self.assertNotEqual(updated_topic_lines[-1], os.linesep) - - def test_newline_between_heading_and_meta_text(self): - """ - Checks that we emit a newline between the heading and the meta text. - """ - topic_file_path = TEST_INPUTS / "user_content_heading_topic.md" - with open(topic_file_path, "r") as topic_file: - updated_topic_lines = self.test_skeleton.update_topic_meta_text( - topic_file) - - start_test_scope_lines = list( - dropwhile( - lambda line: not line.startswith("### Section with user"), - updated_topic_lines)) - self.assertEqual(start_test_scope_lines[1], os.linesep, - "No newline between heading and meta text.") - self.assertTrue( - start_test_scope_lines[2].startswith("_ Example section")) - - -class TestSkeletonTopicChecker(unittest.TestCase): - """ - Test skeleton topic checker function. This test covers different scenarios - that should or should not be detected by the topic checker. - """ - @classmethod - def setUpClass(cls): - """ Setup small test skeleton which contains all edge cases. """ - cls.test_skeleton = tu.Skeleton(TEST_INPUTS / "test_skeleton.md") - - def test_if_good_topic_passes_check(self): - """ - Checks that we do not fail on correct topics and user provided document - content. - """ - topic_file_path = TEST_INPUTS / "user_content_heading_topic.md" - with open(topic_file_path, "r") as topic_file: - self.assertTrue( - self.test_skeleton.check_if_topic_file_matches(topic_file)) - - def test_that_check_detects_missing_sections(self): - """ - Checks that check detects missing sections in topic documents. - """ - topic_file_path = TEST_INPUTS / "missing_sections.md" - with open(topic_file_path, "r") as topic_file: - self.assertFalse( - self.test_skeleton.check_if_topic_file_matches(topic_file)) - - def test_that_check_detects_wrong_sections(self): - """ - Checks that check detects wrong sections in topic documents. - """ - topic_file_path = TEST_INPUTS / "fix_wrong_sections.md" - with open(topic_file_path, "r") as topic_file: - self.assertFalse( - self.test_skeleton.check_if_topic_file_matches(topic_file))