
On Fri, Mar 21, 2008 at 9:17 AM, Eric Niebler <eric@boost-consulting.com> 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. 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.
I'm nowhere near being an expert, but how would a BOOST_STATIC_ASSERT fit in ensuring that Args has the correct arity provided in the construction of expr<>? Would there be a way to statically assert that 'Args' has arity 'Arity' from within Proto? Or would that be too much compile time trouble on top of all the compile time burdens Proto+Fusion+MPL already bring? -- Dean Michael C. Berris Software Engineer, Friendster, Inc. [http://blog.cplusplus-soup.com] [mikhailberis@gmail.com] [+63 928 7291459] [+1 408 4049523]