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. Otherwise the docs for this option need to be
rewritten to explain what it does without reference to ancient changes
in G++ from before templates were fully implemented. I can take a stab
at that if nobody else offers up some alternative text first.
-Sandra