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.