What to learn next?

Once we learn the C++ basics, what to learn next? What are the topics that make up intermediate and advanced C++?
C++ idioms
Learn about some of the typical C++ idioms, such as:
- RAII
- The erase-remove idiom
- PIMPL
- Other idioms
Concurrency through multithreading
The C++ Standard Library offers support for multithreading, mutexes, locking mechanisms, and other related features. Explore std::thread
, std::lock_guard
, std::mutex
and other facilities.
Runtime polymorphism
Learn about virtual and overridden member functions and how to use the std::unique_ptr
to achieve runtime polymorphism.
In-depth template metaprogramming
Learn about template inheritance, specialization, explicit instantiation, and other topics.
Guidelines, dos and don’ts, avoiding pitfalls
Learn about some of the C++-specific guidelines, best practices, and common pitfalls to avoid. A highly recommended read is Scott Meyers' "Effective C++" series. Please note that you don't have to know all the guidelines by heart, but you should be aware of their existence. Many of them are already implemented in static code analyzers.
Software design using C++
If you're interested in software architecture and design, learn about the SOLID principles and design patterns in general. This greatly helps when aiming for elegant C++ class design and an easily maintainable C++ framework.