In addition to the C++14 standard, the Committee is working on a
number of follow-up documents called Technical Specifications (TS),
which carry less weight than the standard, but indicate an
intention to standardize a new library or language feature in a
future standard:
* Concepts Lite TS (my favourite)
Concepts are a mechanism for constraining template parameters.
Today we often write code like this:
template <typename Container>
void sort(Container& c);
Our intention is that the type used as a template argument for
'Container' be a container type, but the compiler doesn't
enforce this - it will accept any type there, and then give
cryptic errors from deep within the template's implementation
when it tries to use the argument as a container.
Concepts allows us to define a concept called 'Container'
which expresses what we mean by a 'container type', and then
write the template like this instead:
template <typename C> requires Container<C>
void sort(C& c);
Or as a short form:
template <Container C>
void sort(C& c);
When calling this function, the compiler checks at the call
site whether the template argument satisfies the Container
concept, and give a much friendlier error if it doesn't.
It's also possible to check the definition of a template
to make sure it doesn't do anything with the template
arguments that's not specified by the concepts to which they
conform.
A 'full' concepts feature would include both directions of
checking (checking the call sites and the definitions).
The committee tried standardizing full concepts for C++11,
but ran into a lot of complexity. It is now resurrecting
the feature in a 'lite' form that only includes checking
of the call sites.
The details of Concepts Lite can be found here [1].
* Array Extensions TS
Support for arrays whose size isn't known at compile time.
C calls these Variable-Lengths Arrays (VLAs). C++ stubbornly
refuses to call them VLAs, and calls them Arrays of Runtime
Bound (ARBs) instead (there are some minor differences
between the two flavours, for example you can call sizeof()
on a VLA (and it will be evaluated at runtime), but not on
an ARB).
The TS will also include a library that wraps ARBs into
a nicer interface, much like how std::array wraps regular
arrays into a nicer interface.
These were originally going to be in C++14, but were moved
into a TS because the library interface isn't fully fleshed
out yet.
* Library Fundamentals TS
This will contain the new <optional> library (originally
headed for C++14 but the committee felt it was safer to
put it into a TS instead) and possibly some other utilities.
* Networking TS
There will actually be a series of Networking TS's. The
first will specify URIs and IP addresses. The second will
specify byte-order conversions. Future ones may deal with
higher-level functionality like sockets.
* Filesystem TS [2]
There may also be a follow-up TS to this that provides
additional features e.g. for enterprise filesystems.
* Transactional Memory TS
A synchronization primitive built into the language.
The proposal can be found here [3].
* Parallelism Extensions TS
Parallel versions of standard library algorithms.
This is in a relatively early stage, but it will possibly
be based on [4].
* Concurrency Extensions TS
Language features that make it easier to write
asynchronous/concurrent code. Also in an early stage,
proposals being considered include [5] and [6].
I believe that most of these are planned for publication in
2014, though probably not the last two, nor the follow-ups
to the Networking and Filesystem TS's.
Botond
[1]
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3701.pdf
[2]
http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3693.html
[3]
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3718.pdf
[4]
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3724.pdf
[5]
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3731.pdf
[6]
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3721.pdf