
Just as: terminal<X>:;type is the type of expressions matching the grammar, terminal<X>, I would expect that binary_expr<T,L,R>::type would match binary_expr<T,L,R>. IOW, just as: matches<terminal<X>::type,terminal<X> > is true, should: matches<binary_expr<T,L,R>::type,binary_expr<T,L,R> > be true? If not, then what is the purpose of binary_expr<,,>::type? If yes, then why am I getting an error with the attached driver whose compilation output is also attached? gcc.compile.c++ ../../../../../bin.v2/sandbox/lje/libs/proto/experiments3/gram_type_test.test/gcc-4.1/debug/link-static/gram_type_test.o gram_type_test.cpp:29: error: conversion from ' boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::args2<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::args0<ti<0> >, 0l>, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::args0<ti<0> >, 0l> >, 2l> ' to non-scalar type ' boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::args2<boost::proto::op::terminal<ti<0> >, boost::proto::op::terminal<ti<0> > >, 2l> ' requested