"...but I can't help but feel like it would be impossible to teach to beginners."
So a relatively easy way to learn C++ is as an 'upgrade' to C, starting of with picking the parts of the language that help you the most:
* you start by already knowing C, but maybe not feeling super productive, using it as structs + functions
* you set up the C++ compiler (most modern version available), and just continue writing C
* you start using streams to print (because it can be more convenient than printf)
* you start using std::vector and std::string, arrays being one of the big pain points of C
* you start using `auto` and for-in loops
* you start using simple classes, without any inheritance. just structs with methods
* you start adding operators - so much fun!
* you start learning about references and const, and suddenly all your method arguments become `const T& v`
* you learn about not using pointers (as much on stack as possible), move semantics, shared/unique pointers. This means you'll also use more templates.
* you deepen your understanding of writing your move/copy constructors. Learn RIAA, and become a fan of `}`.
* you learn about constexpr and constexpr functions
* this is already a pretty happy subset of C++, and as you learn to use templates, you may at some point start writing one yourself. Same with lambdas - if you need them you learn them.