public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jason Merrill <jason@redhat.com>
To: Jonathan Wakely <jwakely.gcc@gmail.com>
Cc: Sandra Loosemore <sandra@codesourcery.com>,
	Gerald Pfeifer <gerald@pfeifer.com>,
		"gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: Doc question: is "templatized" a word?
Date: Wed, 15 Feb 2017 20:17:00 -0000	[thread overview]
Message-ID: <CADzB+2mk8g0jiph=8Yja0VhHmvR30nZdzj5GBt7==mAQhBTGOQ@mail.gmail.com> (raw)
In-Reply-To: <CAH6eHdR3o+81s1zSz6a107v_3fNS=reF4AzW7r4=hEXHNHAufg@mail.gmail.com>

On Wed, Feb 15, 2017 at 1:57 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
> On 15 February 2017 at 15:53, Jason Merrill wrote:
>> On Sat, Feb 11, 2017 at 4:19 PM, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>>> On 11 February 2017 at 20:36, Sandra Loosemore wrote:
>>>> On 02/11/2017 06:21 AM, Jonathan Wakely wrote:
>>>>>
>>>>> On 11 February 2017 at 08:48, Gerald Pfeifer wrote:
>>>>>>
>>>>>> On Fri, 10 Feb 2017, Sandra Loosemore wrote:
>>>>>>>
>>>>>>> The documentation for -Wno-non-template-friend refers to
>>>>>>> "non-templatized
>>>>>>> friend functions" and "templatized functions".  I don't see the term
>>>>>>> "templatized" used anywhere in the C++ standard.  This paragraph also
>>>>>>> uses
>>>>>>> "nontemplate function", which I assume refers to the same thing the C++
>>>>>>> standard spells "non-template function".  So does "non-templatized
>>>>>>> function"
>>>>>>> also mean "non-template function"?  Or does it have some other meaning?
>>>>>>
>>>>>>
>>>>>> I would avoid "templatized" and believe "non-template function" is
>>>>>> more appropriate in your example.
>>>>>
>>>>>
>>>>> Yes,
>>>>>
>>>>> s/non-templatized/non-template/
>>>>> s/nontemplate/non-template/
>>>>> s/templatized function/function template/
>>>>>
>>>>> But I wonder if that warning is even useful nowadays. The example of
>>>>> "friend foo(int);" is bogus and is correctly rejected:
>>>>>
>>>>> fr.cc:2:17: error: ISO C++ forbids declaration of ‘foo’ with no type
>>>>> [-fpermissive]
>>>>>     friend foo(int);
>>>>>                   ^
>>>>
>>>>
>>>> I hadn't actually gotten that far :-) but it looks like that's an
>>>> implicit-int error unrelated to the actual purpose of this option.
>>>>
>>>> This ended up on my todo list firstly because "templatized" didn't
>>>> spell-check, and secondly because the "new compiler behavior" documented in
>>>> connection with this option has existed at least since 1998 and can hardly
>>>> be considered "new" any more.  Also I think the reference to section 14.5.3
>>>> of the C++ standard is bit-rotten (it's 14.5.4 in the c++0x draft I have
>>>> handy).
>>>>
>>>> I'll leave it up to the C++ experts to decide whether the option should just
>>>> be removed and the warning replaced with a hard error controlled by some
>>>> other flag.
>>>
>>> It definitely shouldn't be turned into a hard error, the warning
>>> complains about valid code, such as:
>>>
>>> template<typename T> struct A {
>>>   friend int foo(T);
>>> };
>>>
>>> int main() {
>>>   A<int> a;
>>> }
>>>
>>> I think it warns because the meaning of that code changed, a *long*
>>> time ago, so it's saying "if you wrote this code in the 1990s it might
>>> do something different to what you expect."
>>>
>>> I'm not sure how useful that warning is now, although EDG warns for it
>>> too (with a fix-it hint that I think is bogus):
>>>
>>> "fr.cc", line 2: warning: "int foo(T)" declares a non-template function -- add
>>>           <> to refer to a template instance
>>>     friend int foo(T);
>>>                ^
>>
>> That fix-it looks fine to me;
>
> Where should I add the <> to make it valid?
>
> If I change the example to "friend int foo<>(T);" EDG says it's not a template:
>
> template<typename T> struct A {
>   friend int foo<>(T);
> };
>
> int main() {
>   A<int> a;
> }
>
> "fr.cc", line 2: error: foo is not a template
>     friend int foo<>(T);

Yep, you would also need to declare the foo template earlier in the TU.

Jason

      reply	other threads:[~2017-02-15 20:17 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-11  4:11 Sandra Loosemore
2017-02-11  8:48 ` Gerald Pfeifer
2017-02-11 13:21   ` Jonathan Wakely
2017-02-11 20:36     ` Sandra Loosemore
2017-02-11 21:20       ` Jonathan Wakely
2017-02-15 15:53         ` Jason Merrill
2017-02-15 18:57           ` Jonathan Wakely
2017-02-15 20:17             ` Jason Merrill [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADzB+2mk8g0jiph=8Yja0VhHmvR30nZdzj5GBt7==mAQhBTGOQ@mail.gmail.com' \
    --to=jason@redhat.com \
    --cc=gcc@gcc.gnu.org \
    --cc=gerald@pfeifer.com \
    --cc=jwakely.gcc@gmail.com \
    --cc=sandra@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).