Course Prerequisites and Conventions

Get to know the prerequisites and the course conventions to get the most out of this course.

To get started with this course, we need to have some basic knowledge of the C++ programming language. We also need to know the syntax and fundamentals of classes, functions, operators, function overloading, inheritance, virtual functions, and more. However, no knowledge of templates is required; this course will teach the learner everything from scratch.

Note: To run the code on your local computer, see the Running Code on Your Local Machine lesson.

Mentions and further readings

Throughout the course, we are referring multiple times to the C++ standard. This document is copyrighted by the International Organization for Standardization. The official C++ standard document can be purchased from However, multiple drafts of the C++ standard as well as the sources used to generate them are freely available on GitHub. We can find additional information about the C++ standard here. A great online resource for C++ developers is the C++ Reference website. This provides exhaustive documentation of the C++ language directly derived from the C++ standard. Content from the C++ Reference is quoted several times in the course. The C++ Reference content is licensed under CC-BY-SA license. At the end of the course, there’s a section called Further Readings. This section contains a list of readings used as a bibliography and recommended for deepening our knowledge of the presented topics.

Conventions used

There are a number of text conventions used throughout this course.

Code in text: Indicates code words in text, database table names, folder names, file names, file extensions, pathnames, user input, and Twitter handles. Here is an example: “This problem can be fixed by making init a dependent name.”

A block of code is set as follows:

Press + to interact
template<typename T>
struct parser
void parse()
this->init(); // OK
std::cout << "parse\n";

Any command-line input can be provided in the input box:

Press + to interact
Command-line input for executing the code
Command-line input for executing the code

Any command-line output is shown as follows:

Press + to interact
Output generated by executing the code
Output generated by executing the code

Any command-line input or output is written as follows:

fatal error: recursive template instantiation exceeded maximum
depth of 1024
use -ftemplate-depth=N to increase recursive template
instantiation depth
Input/output presented to the reader

Bold: Indicates a new term and an important word. For example, metaprogramming is the programming technique of using templates (and constexpr functions in C++) to generate code at compile-time that is then merged with the rest of the source code for compiling a final program. Metaprogramming implies that at least an input or an output is a type.

Quotations (“ ”): Indicate the words in menus or dialog boxes that appear onscreen. Here is an example: Click the “Run” button below the code to execute it.

Tips or important notes: The key tips or important notes will appear as follows in this course.

Note: Important notes