Hi,

On Wed, 26 Sep 2012, Lawrence Crowl wrote:

> > A lower-case type name indicates to me a non-changing type,
> > i.e. nothing that depends on a template.  In C we only had
> > such types so we used lower-case names everywhere.  With C++
> > and templates I think we should start using upper case for some
> > very specific use cases, like first letter of dependend types.
> 
> How would you distinguish them from template parameter names,
> which by convention have an upper case first letter?

I wouldn't.  If the distinction becomes so important that authors need to 
see the speciality immediately by having a different convention how to 
spell names, then I think we did something wrong, and we should simplify 
the code.

> What about non-type dependent names?

I'm not sure what you're asking.  Let's make an example:

template <typename T>
struct D : B<T>
{
  typedef typename B<T>::E E; // element_type
  E getme (int index);
}

In fact, as B<T>::E would probably be defined like "typedef typename T E", 
I would even have no issue to call the above E also T.  The distinction 
between the template arg name and the typedef would be blurred, and I say, 
so what; one is a typedef of the other and hence mostly equivalent for 
practical purposes.  (And if they aren't, then again, we did something too 
complicated with the switch to C++).

> The advantage to following them is that they will surprise no one.

They will surprise everyone used to different conventions, for instance 
Qt, so that's not a reason.

> Do you have an alternate suggestion, one that does not confuse template 
> parameters and dependent names?

Upper last character?  Just kidding :)  Too many detailed rules for 
conventions are the death of them, use rules of thumbs, my one would be 
"somehow depends on template args -> has upper character in name", where 
"somehow depends on" includes "is a".


Ciao,
Michael.

Reply via email to