The ``proto::literal<>`` terminal wrapper, and the `proto::lit()` function for creating ``proto::literal<>`` wrappers.

proto::default_domain
`proto::extends`<`proto::basic_expr`<`proto::tag::terminal`, `proto::term`< T > >, proto::literal<T, Domain>, Domain>
A simple wrapper for a terminal, provided for ease of use.

A simple wrapper for a terminal, provided for ease of use. In all cases, `proto::literal<X> l(x);` is equivalent to ``proto::terminal`<X>::type l = {x};`.

The `Domain` template parameter defaults to ``proto::default_domain``.

For exposition only
`proto::basic_expr`<`proto::tag::terminal`, `proto::term`< T > >
typename `proto::result_of::value`<X>::type
typename `proto::result_of::value`<X &>::type
typename `proto::result_of::value`<X const &>::type
reference `proto::value(*this)`
const_reference `proto::value(*this)`
U &
U const &
proto::literal
< U, Domain > const &
`proto::literal`< T & > const `T &

The object to wrap.

`
`proto::literal`< T const & > const `T const &`
A helper function for creating a ``proto::literal<>`` wrapper.

``proto::literal`<T &>(t)`

Will not throw.

The returned value holds the argument by reference.