Skip to content

Decide how to indent class template definitions #1754

Closed
@tkoeppe

Description

@tkoeppe

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).)

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

    Issue actions