C++ Logo


Advanced search

The C++ 17 Standard, friend functions, their visibilities and definitions.

From: Vladimir Grigoriev <vlad.moscow_at_[hidden]>
Date: Wed, 18 Dec 2019 02:14:40 +0300
There is a confusing that requires a clarification in the C++ Standard relative to friend function declarations.
On the one hand, according to the quote ( Namespace member definitions)
2 Members of a named namespace can also be defined outside that namespace by explicit qualification (
of the name being defined, provided that the entity being defined was already declared in the namespace and
the definition appears after the point of declaration in a namespace that encloses the declaration’s namespace
On the other hand, according to this quote
3 If a friend declaration in a non-local class first declares a class, function, class template or function template97
the friend is a member of the innermost enclosing namespace. The friend declaration does not by itself make
the name visible to unqualified lookup (6.4.1) or qualified lookup (6.4.3).
Now consider the program I provided in my question at Stackoverflow
The program is compiled successfully except that the gcc compiler issues warnings.
However according to the quote #3 the program is ill-formed and the compilers should issue an error.
And a question arises: if there was a friend function declaration in a class may it be defined in the enclosing namespace despite that the name of the friend function is invisible in the namespace where it is declared?
I think that the Standard could make a clarification relative to such a situation.
With best regards,
(Vlad from Moscow).
You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or http://ru.stackoverflow.com

Received on 2019-12-17 17:17:08