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
istd::unordered_map
funkcjitry_emplace
iinsert_or_assign
.try_emplace
nie zje przekazanych doń argumentów w przypadku gdy element mapy już istnieje, ainsert_or_assign
dział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
,array
ivalarray
) - zagnieżdżanie namespace’ów:
namespace A::B::C { /* ... */ }}}
zamiastnamespace A { namespace B { namespace C { /* ... */ }}}
- dedukcja
auto
jako 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_ref
irandom_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