On 14 March 2017 at 14:18, David Malcolm wrote: > Looking at PR ipa/80000, which notes that ipa-devirt.c has two trailing > spaces in: > > if (warning_at ( > DECL_SOURCE_LOCATION(TYPE_NAME (DECL_CONTEXT (vtable->decl))), > OPT_Wodr, > "virtual table of type %qD violates " > "one definition rule ", > DECL_CONTEXT (vtable->decl))) > > and thus emits: > > foo.cc: virtual table of type 'foo' violates one definition rule > > ...I think the wording here is a little confusing to a novice C++ > coder: it could be misread that the compiler is complaining that there > are "definition rules", and that one of them has been somehow violated > ("why aren't you telling me which one?"), as opposed to the correct > reading, that there is a rule that there must be one definition.
Agreed. > There are 5 such diagnostics, all in ipa-devirt.c. > > So I think the wording could be improved by adding a "the", and maybe > capitalizing, to make it: > > foo.cc: virtual table of type 'foo' violates the One Definition Rule > > (giving a big hint to the user that the "One Definition Rule" is the thing > that they should be typing into their search engine, and that "ODR" is an > acronym form of it). > > I've even seen it hyphenated in some places, which would make it: > > foo.cc: virtual table of type 'foo' violates the One-Definition Rule > > or: > > foo.cc: virtual table of type 'foo' violates the one-definition rule > > > Here's a patch to the terminology part of our conventions, which suggests > adding a "the" and capitalizing (but without the hyphen). > > > Thoughts? The draft C++ standard switched to consistently hyphenating it about 18 months ago, meaning C++14 doesn't have a hyphen, but C++17 will. So all-lowercase with a hyphen ("the one-definition rule") matches the usage in the current draft, and is still clear we're not talking about one of a set of definition rules.