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::map i std::unordered_map funkcji try_emplace i insert_or_assign. try_emplace nie zje przekazanych doń argumentów w przypadku gdy element mapy już istnieje, a insert_or_assign działa w zasadzie jak operator[], 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, array i valarray)
  • zagnieżdżanie namespace’ów: namespace A::B::C { /* ... */ }}} zamiast namespace A { namespace B { namespace C { /* ... */ }}}
  • dedukcja auto jako typu znajdującego się wewnątrz nawiasów klamrowych w wyrażeniach typu auto foo{T}; zamiast std::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_ref i random_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