> * Check against cxx11 dialect, not cxx0x.
Let's talk about this tomorrow. I'm not quite sure how to do this.
> * Any particular reason to use classes with operator() for the
> parseers and the combinators? GCC can inline indirect calls to
> functions with internal linkage. That should cut down on the
> constructor boilerplates. This particular change can be addressed
> after the commit.
Some of the other combinators that I've built for the requires
expression have data fields that act as arguments to the actual other
cp_parser_* calls. I'll submit those with the relevant patch.
This should be easy to refactor, though.
> | +template<typename T>
> | +inline T* take(T*& p)
> | +{
> | + T* q = p;
> | + p = NULL;
> | + return q;
> | +}
> | +} // namespace
> | +
> | +
>
> Call it 'release' -- following standard library terminology.
Ah... yes. Good name.
> Suggestion: nonnull_or_else? or assert_nonnull? or check_nonnull?
> or validate?
check_nonnull is a good name.
> | - /* 1 spare bit */
> | + unsigned concept_p : 1; /* var or fn */
> | + /* 0 spare bit */
> | };
>
> Hmm I don't understand the comment "var or fn".
> If it is declared a concept, how can it it be a var?
Copied from the other bits in the class. I think it means it applies
to either variables or functions. I left it that way in anticipation
of template variables.