Description
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:
-
"No linebreak after
template
":namespace std { template <typename T> class foo { public: void bar(); }; }
-
"linebreak and indent":
namespace std { template <typename T> class foo { public: void bar(); }; }
-
"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
jensmaurer commentedon Nov 7, 2017
Editorial meeting consensus: 1 and 3 for definitions and 1 and 2 for non-defining declarations. Also have line breaks between definitions.
jensmaurer commentedon Feb 16, 2018
This seems to override the decision in #1576 and address #1516.
jensmaurer commentedon Feb 16, 2018
When performing any changes, make sure to also consider "namespace std" wrappers: #1168.
jensmaurer commentedon Feb 16, 2018
Let's double-check our decisions in Jacksonville (cognizant of earlier wobbling) before embarking on a harmonization frenzy.
tkoeppe commentedon Mar 17, 2018
Decision confirmed with @zygoloid. I updated the wiki to replace contradictory information with guidance that matches this decision.
[utilities] Minor whitespace tweaks