Skip to content

Decide how to indent class template definitions #1754

Closed
@tkoeppe

Description

@tkoeppe
Contributor

We currently have several different styles of indenting class template definitions. Usually, every "structural" line break causes an extra indent level, like we have in synopses:

namespace std {
  template <typename T>
    class foo;
}

But when it comes to definitions, we sometimes follow this convention and othertimes we violate it:

  1. "No linebreak after template":

    namespace std {
      template <typename T> class foo {
      public:
        void bar();
      };
    }
    
  2. "linebreak and indent":

    namespace std {
      template <typename T>
        class foo {
        public:
          void bar();
        };
    }
    
  3. "linebreak with no indent":

    namespace std {
      template <typename T>
      class foo {
      public:
        void bar();
      };
    }
    

Of these three options, (1) and (2) seem the most consistent. Option (1) is not always feasible when the template parameter list is long. However, option (3) is used a lot, especially in the older parts of the text (e.g. [containers]).

For now, I will probably retain the local style, though if I need to add missing namespace std {s and the indentation changes, I might as well remove instances of (3). But it would be good to decide on a definite style and record that in the wiki. (My vote would be to allow only (1) and (2).)

Activity

added
decision-requiredA decision of the editorial group (or the Project Editor) is required.
on Oct 13, 2017
jensmaurer

jensmaurer commented on Nov 7, 2017

@jensmaurer
Member

Editorial meeting consensus: 1 and 3 for definitions and 1 and 2 for non-defining declarations. Also have line breaks between definitions.

removed
decision-requiredA decision of the editorial group (or the Project Editor) is required.
on Nov 7, 2017
jensmaurer

jensmaurer commented on Feb 16, 2018

@jensmaurer
Member

This seems to override the decision in #1576 and address #1516.

jensmaurer

jensmaurer commented on Feb 16, 2018

@jensmaurer
Member

When performing any changes, make sure to also consider "namespace std" wrappers: #1168.

added
bigAn issue causing a large set of changes, scattered across most of the text.
on Feb 16, 2018
jensmaurer

jensmaurer commented on Feb 16, 2018

@jensmaurer
Member

Let's double-check our decisions in Jacksonville (cognizant of earlier wobbling) before embarking on a harmonization frenzy.

added
decision-requiredA decision of the editorial group (or the Project Editor) is required.
on Feb 16, 2018
tkoeppe

tkoeppe commented on Mar 17, 2018

@tkoeppe
ContributorAuthor

Decision confirmed with @zygoloid. I updated the wiki to replace contradictory information with guidance that matches this decision.

removed
decision-requiredA decision of the editorial group (or the Project Editor) is required.
on Mar 17, 2018
added a commit that references this issue on Apr 2, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bigAn issue causing a large set of changes, scattered across most of the text.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @tkoeppe@jensmaurer

        Issue actions

          Decide how to indent class template definitions · Issue #1754 · cplusplus/draft