Rvalue references for this
struct t { void h(); }
(...).h(); // ... может быть и lvalue и rvalue
struct t { void h()&; //this только lvalue void h()&&; //только rvalue }
Non-static member initializers
Говорит просто во всех конструкторах. в которых не указано - скажи равно этому
struct point {
float x = 0.f;
float y = 0.f;
}
Right angle brackets
vector<vector<int>> b // >> раньше было сдвигом вправо
Extern templates
template <typename T> struct basic_string {};
extern template struct basic_string<char>; //Подавление инстанцирования
Strongly-typed enums
enum color { red, green, blue };
enum state { initial, waiting, running };
state next(state s) { ... }
color n = next(red); //Неявное преобразование - оч плохо
Нельзя поменять enum
сам по себе, т.к сломается си’шный код
enum class color: uint8_t { // Явно указать на базе какого типа red, green, blue };
enum class state { initial, waiting, running };
color n = next(color::red);
В такие enum
'ах енумераторы находятся в namespace
енума. По умолчанию нельзя применять операторы, нет неявного преобразования между собой и в int
Можно перегрузить операторы.
Из-за возможности указать underline type появилась возможность forwarding declaration
enum class msg_id: uint32_t;