...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::xpressive::value — value<>
is a lazy wrapper for a value that can be used in xpressive semantic actions.
// In header: <boost/xpressive/xpressive_fwd.hpp> template<typename T> struct value : public proto::extends< proto::terminal< T >::type, value< T > > { // construct/copy/destruct value(); explicit value(T const &); // public member functions T & get(); T const & get() const; };
Below is an example that shows where
is useful.value<>
sregex good_voodoo(boost::shared_ptr<int> pi) { using namespace boost::xpressive; // Use val() to hold the shared_ptr by value: sregex rex = +( _d [ ++*val(pi) ] >> '!' ); // OK, rex holds a reference count to the integer. return rex; }
In the above code, xpressive::val()
is a function that returns a value<>
object. Had val()
not been used here, the operation ++*pi
would have been evaluated eagerly once, instead of lazily when the regex match happens.