diff options
Diffstat (limited to 'src/boost/libs/metaparse/example/getting_started/7.hpp')
-rw-r--r-- | src/boost/libs/metaparse/example/getting_started/7.hpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/boost/libs/metaparse/example/getting_started/7.hpp b/src/boost/libs/metaparse/example/getting_started/7.hpp new file mode 100644 index 00000000..fe245b98 --- /dev/null +++ b/src/boost/libs/metaparse/example/getting_started/7.hpp @@ -0,0 +1,49 @@ +#ifndef BOOST_METAPARSE_GETTING_STARTED_7_HPP +#define BOOST_METAPARSE_GETTING_STARTED_7_HPP + +// Automatically generated header file + +// Definitions before section 6.2 +#include "6_2.hpp" + +// Definitions of section 6.2 +#include <boost/mpl/minus.hpp> + +template <class L, char Op, class R> struct eval_binary_op; + +template <class L, class R> struct eval_binary_op<L, '+', R> : boost::mpl::plus<L, R>::type {}; + +template <class L, class R> struct eval_binary_op<L, '-', R> : boost::mpl::minus<L, R>::type {}; + +// query: +// eval_binary_op<boost::mpl::int_<11>, '+', boost::mpl::int_<2>>::type + +// query: +// eval_binary_op<boost::mpl::int_<13>, '-', boost::mpl::int_<2>>::type + +template <class S, class Item> + struct binary_op : + eval_binary_op< + S, + boost::mpl::at_c<Item, 0>::type::value, + typename boost::mpl::at_c<Item, 1>::type + > + {}; + +// query: +// binary_op<boost::mpl::int_<11>, boost::mpl::vector<boost::mpl::char_<'+'>, boost::mpl::int_<2>>>::type + +using exp_parser13 = + build_parser< + foldl_start_with_parser< + sequence<one_of<plus_token, minus_token>, int_token>, + int_token, + boost::mpl::quote2<binary_op> + > + >; + +// query: +// exp_parser13::apply<BOOST_METAPARSE_STRING("1 + 2 - 3")>::type + +#endif + |