This is the mail archive of the
mailing list for the GCC project.
Re: [wwwdocs, PATCH] C++ terminology: the One Definition Rule in diagnostics
- From: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- To: David Malcolm <dmalcolm at redhat dot com>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Tue, 14 Mar 2017 14:35:15 +0000
- Subject: Re: [wwwdocs, PATCH] C++ terminology: the One Definition Rule in diagnostics
- Authentication-results: sourceware.org; auth=none
- References: <firstname.lastname@example.org>
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))),
> "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.
> 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
> 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).
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.