On Thu, Jun 25, 2015 at 10:44 PM, Jeff Law <l...@redhat.com> wrote:
> On 06/25/2015 12:28 PM, Richard Sandiford wrote:
>>
>> Sorry in advance for inviting a bikeshed discussion, but while making
>> the hashing changes that I just committed, I noticed that the C++ification
>> has been done in a variety of different styles.  I ended up having to
>> follow
>> the "do what the surrounding code does" principle that some code bases
>> have,
>> but to me that's always seemed like an admission of failure.  One of the
>> strengths of the GCC code base was always that it was written in a very
>> consistent style.  Regardless of what you think of that style (I
>> personally
>> like it, but I know others don't at all), it was always easy to work on
>> a new area of the compiler without having to learn how the surrounding
>> code
>> preferred to format things.  It would be a shame if we lost that in the
>> rush to make everything "more C++".
>>
>> The three main inconsistencies I saw were:
>>
>> (1) Should inline member functions be implemented inside the class or
>> outside
>>      the class?  If inside, should they be formatted like this:
>>
>>         void
>>         foo (args...)
>>         {
>>           ...;
>>         }
>>
>>      or like this:
>>
>>         void
>>         foo (args...)
>>           {
>>             ...;
>>           }
>>
>>      (both have been used).
>>
>>      The coding standard is pretty clear about this one:
>>
>>          Define all members outside the class definition. That is, there
>>          are no function bodies or member initializers inside the class
>>          definition.
>>
>>      But in-class definitions have become very common.  Do we want
>>      to revisit this?  Or do we just need more awareness of what the
>>      rule is supposed to be?
>>
>>      [Personally I like the rule.  The danger with in-class definitions
>>      is that it becomes very hard to see the interface at a glance.
>>      It obviously makes things more verbose though.]
>
> I'd say let's go with the existing rule.  I know that in-class definitions
> are relatively common, particularly if they are trivial, so do we want an
> exception for anything that fits on a single line?

I think so.  Similar for constructors with only : initializers and otherwise
empty body.

Richard.

>
>>
>> (2) Is there supposed to be a space before a template parameter list?
>>      I.e. is it:
>>
>>         foo<bar>
>>
>>      or:
>>
>>         foo <bar>
>>
>>      ?  Both are widely used.
>>
>>      The current coding conventions don't say explicitly, but all the
>>      examples use the second style.  It's also more in keeping with
>>      convention for function parameters.  On the other hand, it could
>>      be argued that the space in:
>>
>>         foo <bar, frob>::thing
>>
>>      makes the binding confusing and looks silly compared to:
>>
>>         foo<bar, frob>::thing
>>
>>      But there again, the second one might look like two unrelated
>>      blobs at first glance.
>
> I'd go with whatever gnu-ident does with these things.  I'd hate for us to
> settle on a style that requires non-default behaviour from gnu-indent.
>
>
>
>
>
>>
>> (3) Do we allow non-const references to be passed and returned by
>>      non-operator functions?  Some review comments have pushed back
>>      on that, but some uses have crept in.
>>
>>      [IMO non-const references are too easy to misread as normal
>>      parameters.]
>>
>> In all three cases, whether the answer is A or B is less important
>> than whether the answer is the same across the code base.
>
> I could make an argument either way on this one...
>
> jeff
>

Reply via email to