  Parallel programming remains a daunting challenge, from the struggle to
express a parallel algorithm without cluttering the underlying synchronous
logic, to describing which devices to employ in a calculation, to correctness.
Over the years, numerous solutions have arisen, many of them requiring new
programming languages, extensions to programming languages, or the addition of
pragmas. Support for these various tools and extensions is available to a
varying degree. In recent years, the C++ standards committee has worked to
refine the language features and libraries needed to support parallel
programming on a single computational node. Eventually, all major vendors and
compilers will provide robust and performant implementations of these
standards. Until then, the HPX library and runtime provides cutting edge
implementations of the standards, as well as proposed standards and extensions.
Because of these advances, it is now possible to write high performance
parallel code without custom extensions to C++. We provide an overview of
modern parallel programming in C++, describing the language and library
features, and providing brief examples of how to use them.
