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.

Reply via email to