
Hi Eric, I went into the following error with a grammar using terminals of T[N] (terminal<int[2]> in the example, gcc 4.5.0, boost 1.43): /usr/local/include/boost/proto/matches.hpp:1026:13: error: ambiguous class template instantiation for struct boost::proto::detail::lambda_matches<int [2], boost::proto::wildcardns_::_, -0x00000000000000001l> /usr/local/include/boost/proto/matches.hpp:119:13: error: candidates are: struct boost::proto::detail::lambda_matches<T, boost::proto::wildcardns_::_, -0x00000000000000001l> /usr/local/include/boost/proto/matches.hpp:129:13: error: struct boost::proto::detail::lambda_matches<T [M], U, -0x00000000000000001l> Adding the following specialization in matches.hpp solves it: template<typename T, std::size_t M> struct lambda_matches<T[M], proto::_ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)> : mpl::true_ {}; Best regards, Antoine