
On 03/20/08 20:17, Eric Niebler wrote:
Larry Evans wrote:
However, I'd imagine some people would want this restricted to just two elements, which could be done with something like: <snip> And now, if size<Args>::value is restricted to the Arity in tag_arity<shift_right,Arity> then it would be restricted to 2.
Users may very well want to restrict tag::plus to arity 2 *in their domain*, but they shouldn't be foisting that decision on other consumers of Proto.
Good point. I agree. then just define: template<class Tag,int Arity,class Domain=default_domain> tag_arity{}; which has no restrictions on arity, but it allow the user to specify restrictions by specializaing on Domain.
The best way to ensure that expressions have the arity you expect is to encode that in the grammar for your domain, and check it with proto::matches.
Like in the attached?