>Eric Lemings wrote:
>> Martin Sebor 
>> 
>> This thread kind of fizzled out so let me resurrect it and reiterate
>> the proposed naming convention to follow unless more specific names
>> are appropriate:
>> 
>>      template <class _TypeT, class... _Types>     # 1
>> 
>> This is in contrast to other styles, including:
>> 
>>      template <class _Type, class... _Types>      # 2
>>      template <class _HeadT, class... _TailT>     # 3
>>      template <class _TType, class... _UTypes>    # 4
>> 
>> The rationale for the proposed convention (#1) is that:
>> 
>>    A) unlike the alternatives, the first name (_TypeT) follows
>>       a well-established and entrenched convention for template
>>       parameters used throughout the library
>>    B) also unlike the alternatives, it is being used in the
>>       implementation of <type_traits>
>>    C) unlike (#2) (although not as well as #3) it more clearly
>>       distinguishes between the name of the first parameter and
>>       the parameter pack
>> 

[...]

>
>In this case, it depends on whether the two parameters are actually part
>of the same type list.  If _TypesT and _Types are actually part of the
>same type list then they should be named either _TypeT and _TypesT
>respectively (or _Type and _Types as shown in #2).  If they are not part
>of the same type list, then they should be named _TypeT and _TypesU
>(similar to #4).
>
>In any case, a plural name should implicitly denote a template parameter
>pack (which actually should rule out #3 even though I've already been
>using it).  :P
>
>Brad.

I'm with Brad

> Check the box below to vote:
> 
>    [ ] In favor
>    [x] Opposed (suggest an improvement and rationale)
>

I think the names really depend on the intent and where it is being used. If 
you have a parameter pack that is essentially a single typelist, like so...

  template <class... _TTypes> struct S;

I'd expect the first template parameter and the parameter pack to have similar 
names. The above will likely break down to the following recursive template 
declaration...

  template <class _TypeT> struct S;
  template <class _TypeT, class... _TTypes> struct S;

If, on the other hand, the first argument stands alone and the parameter pack 
is a typelist, then I'd expect something more like the following...

  template <class _TypeT, class... _UTypes>  struct S;

  template <class _TypeT, class _TypeU> struct S;
  template <class _TypeT, class _TypeU, class... _UTypes> struct S;

Travis

Reply via email to