std::byte over uint8_t use namespaces try out std::format if (initialisers; conditional expression) switch case -- fallthrough with [[fallthrough]]; attribute to tell compiler fallthrough attributes i.e. [[attribute]]; CTAD (class template argument deduction) utilise std::optional structured bindings i.e. [x,y] {some_length_2_array} std::initializer_list for variable lengthed type safe function args uniform initialisation (doesn't allow narrowing)