# Advanced Programming in C++

## Course Goal

The goal is to teach programming in modern C++ (as defined in the ISO C++17 and possibly ISO C++20 standards), including advanced topics such as move semantics, generic programming and metaprogramming using templates and concepts, functional programming, parallel programming using threads, …

The officially supported compiler is GCC 10. For more details about the usage of GCC (or its alternatives) on the school computers and on your system and about the recommended static analysis tools, see the Tools page.

The main C++ reference source is the C++ reference web page.

## Online Teaching in Autumn 2020

Due to the COVID-19 pandemic we are not allowed to perform classical in-classroom teaching in the autumn 2020 semester. Therefore this course will be taught purely online.

- Lectures will be given by a combination of recordings from previous runs of the course and recordings of new topics.
- Seminars consist of seminar tasks and solutions that are given to you. Solutions will be given after the last consultation slot in each week to motivate you to solve the exercises without looking at the solutions. We strongly recommend you solve the tasks yourselves before looking at the solutions (and use the consultations if needed).
**Consultations will be available on Discord in the time slots of seminars given in IS (Tuesday 14:00–15:40 and Wednesday 16:00–17:40)**and in IS forums (all time but with greater latency) to help you with the tasks. You don’t need to honor your seminar group’s time.- There are no changes to the homework and projects.

Sadly, the load of teaching online is generally higher than in-classroom teaching for both teachers and students. In PV264, we believe the load for students will be comparable as the seminars were mostly based on individual work anyway. However, due to the increased load on teachers over all our courses, we expect we will have somewhat less time for PV264 than in previous years (the massive courses for bachelor-level students are our priority). This might have some negative impact on our response times and on the amount of C++20 topics covered in this run of the course.

## Homework

There will be two homework assignments in the first half of the semester. The homework solution will not be awarded points, the evaluation is pass/fail only. Each homework assignment may be submitted multiple times. For more details about the submission procedure, see the Homework page. *(Currently under reconstruction.)*

## Projects

In the second half of the semester, you will work on a group project. The project includes a checkpoint, a presentation talk, and two code reviews (one at checkpoint time, one at the end of semestr) of another group’s project. The expected group size is 2–3 students. You may choose from a list of suggested topics. The projects will be awarded at most 6 points, distributed as follows:

- 3 points for the functionality;
- 3 points for the code/design quality.

At most three points can be deduced from this total for the following reasons:

- 1 point will be deduced if you fail to prepare the presentation or your presentation is of very poor quality,
- 1 point will be deduced if you fail to provide the checkpoint code review;
- 1 point will be deduced if you fail to provide the final project code review.

To pass the course, every student has to get at least 4 points. If the project is awarded less that the maximal number of points, the group may rework their project and resubmit it during the exam period after the semester. For more details, see the Project page.