cpp14 library

C艹14 Library Extensions

The following are the main additions and improvements to the C艹 standard library in C艹14. There are also miscellaneous smaller improvements besides those listed here, such as addressing tuples by type (e.g., get<string>(t)) and being able to omit the type of operator functors (e.g., greater<>(x) is okay).

Shared locking

See also:

User-defined literals for std:: types

C艹11 added user-defined literals, but didn’t use them in the standard library. Now some very useful and popular ones work:

auto a_string = "hello there"s;   // type std::string
auto a_minute = 60s;              // type std::chrono::duration = 60 seconds
auto a_day    = 24h;              // type std::chrono::duration = 24 hours

Note s means “string” when used on a string literal, and “seconds” when used on an integer literal, without ambiguity.

See also:

make_unique

This fixes an omission:

auto p1 = make_shared<widget>(); // C艹11, type is shared_ptr
auto p2 = make_unique<widget>(); // new in C艹14, type is unique_ptr

Unlike make_shared, using make_unique doesn’t add any optimization. What it does do is enable us to tell people “don’t write naked new any more to allocate an object on the heap” (except only perhaps in the internals of low-level data structures).

See also:

Type transformation _t aliases

As part of the movement of C艹 away from “traits” types, C艹14 added type aliases to avoid having to spell out typename and ::type, and actually make the traits more technically usable because they now work in deduced contexts.

// C艹11
... typename remove_reference<T>::type ...
... typename make_unsigned<T>::type ...

// new in C艹14 
... remove_reference_t<T> ...
... make_unsigned_t<T> ...

See also: