
Proto behaves in a different way when matching terminal<char> and terminal<int>. The only difference I'm aware is that it is implementation defined whether 'char' means 'signed char' or 'unsigned char' but it has to mean one of the two. I was surprised to hit the following: struct char_grammar : proto::or_< proto::terminal<signed char>, proto::terminal<unsigned char>
{}; struct extended_char_grammar : proto::or_< proto::terminal<char>, proto::terminal<signed char>, proto::terminal<unsigned char>
{}; struct int_grammar : proto::or_< proto::terminal<signed int>, proto::terminal<unsigned int>
{}; int main() { // WHY _NOT? BOOST_MPL_ASSERT_NOT ((proto::matches<proto::terminal<char>, char_grammar>)); BOOST_MPL_ASSERT ((proto::matches<proto::terminal<char>, extended_char_grammar>)); // GIVEN THAT: BOOST_MPL_ASSERT ((proto::matches<proto::terminal<int>, int_grammar>)); return 0; } Is this behaviour intentional? Regards, Maurizio