Urbana meeting
Między 3 a 8 listopada w Urbana-Champaign miało miejsce pierwsze spotkanie komitetu standaryzacyjnego C++ dotyczące C++17. Pośród omówionych rzeczy dotyczących core’a C++ były m.in.:
- nowa funkcja,
std::uncaught_exception, zwracająca ilość niezłapanych wyjątków - oficjalne sformułowanie “forwarding reference” (gwoli przypomnienia, jest to propozycja oficjalnej nazwy dla rvalue referencji do dedukowanych typów, które Scott Meyers pierwotnie nazwał “universal reference”)
- wprowadzenie literału
u8(UTF-8) - “folding expressions” umożliwiające wykonywanie działań na wszystkich parametrach z parameter packa bez ucieczki w TMP. Na przykład:
template <typename... Args>
bool foo(Args... args) {
return (true + ... + args); // wielokropek jest częścią folding expression
}
- dodanie do interfejsów
std::mapistd::unordered_mapfunkcjitry_emplaceiinsert_or_assign.try_emplacenie zje przekazanych doń argumentów w przypadku gdy element mapy już istnieje, ainsert_or_assigndziała w zasadzie jakoperator[], ale nie wymaga od mapowanego typu bycia domyślnie konstruowalnym. - “contiguous iterators” dla typów ułożonych w ciągłej pamięci (jak
vector,arrayivalarray) - zagnieżdżanie namespace’ów:
namespace A::B::C { /* ... */ }}}zamiastnamespace A { namespace B { namespace C { /* ... */ }}} - dedukcja
autojako typu znajdującego się wewnątrz nawiasów klamrowych w wyrażeniach typuauto foo{T};zamiaststd::initializer_list<t>, jak to ma miejsce w tej chwili
Następujące zmiany nie zachowują kompatybilności wstecznej języka:
- usunięcie trigrafów (nareszcie)
- usunięcie
auto_ptr,bind1st,bind2nd,ptr_fun,mem_fun,mem_fun_refirandom_shuffle
Poza tym zaakceptowano szereg innych zmian, które są dodawane póki co do
biblioteki <experimental>. Następne tak duże spotkanie w maju przyszłego roku.
Pełną relację Herb Sutter opublikował na stronie
isocpp.org