On 4/14/12, Gabriel Dos Reis <g...@integrable-solutions.net> wrote:
> On Apr 14, 2012 Pedro Lamarão <pedro.lama...@gmail.com> wrote:
> > currently proposed C++ Coding Conventions imply a very strict
> > weird-is-forbidden style, which I like.
> >
> > But if defining new templates should in general be avoided,
> > I'm unsure what is the best path in converting VEC.
> >
> > VEC interface optimizes element acessors to copy primitive
> > types and point-to object types.
> >
> > If VEC is to be a template class, default accessors in C++ would
> > naturally return a (const-)reference-to anything. It would be
> > possible to optimize accessors to return a copy instead of a
> > const-reference-to with enable_if.  All this would allow VEC to
> > be mostly just one thing, with small variations in corresponding
> > to VEC_last and VEC_index.
> >
> > Since enable_if is not part of C++98, it would be added to GCC
> > itself -- perhaps in namespace gcc.
> >
> > This decision will not block work in the branch, of course --
> > VEC can be converted first unoptimized and then reoptimized
> > with whatever tricks are allowed.
>
> One of the requirements is that the code should bootstrap with
> any C++03 compiler.  Another requirement is to keep template
> usage simple.  Those two requirements to me mean avoid enable_if.
> Of course, maintainers will exercise judgment on specific cases,
> but as a general guideline, I would suggest to forget them.

Implicit, I think, in Gabriel's statement is that if you really need
enable_if, and make a convincing case, you can get an exception to
the general rule.

To my mind, one of the advantages of enable_if is that customers do
not need to know about it.  It is an internal implementation issue,
and presumably authors using enable_if are comfortable with it.

-- 
Lawrence Crowl

Reply via email to