...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
Whenever we see a constant in a partially applied function, an
(where T is the type of the constant) is automatically created for us. For instance:
Passing a second argument,
expression::value<T>::type is implicitly created behind the
scenes. This is also equivalent to
T is the type of
v. In most cases, there's
no need to explicitly use
but, as we'll see later on, there are situations where this is unavoidable.
Like arguments, values are also actors. As such, values can be evaluated. Invoking a value gives the value's identity. Example:
cout << val(3)() << val("Hello World")();
prints out "3 Hello World".