Between the C++98 standard and the C++03 standard, an interesting change was made:
struct S {
int S;
};
This code is valid in C++03 and newer, but was ill-formed in C++98. Specifically, [class.mem] paragraph 13 banned all data members from having the same name as the class in C++98, but this rule was relaxed so that if there is no user-declared constructor, you can have a non-static data member with the same name.
What is the motivation behind this? What important use case is covered by this that would warrant revising the standard?
This is from DR80. To paraphrase, static
was there originally to conform with C but between the May '96 and September '96 working papers the standard was changed and static
was removed. C++03 reverted that error from the language via the defect report.