This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 117b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-08-11
2460. C language linkage and constrained non-template friendsSection: 9.12 [dcl.link] Status: CD6 Submitter: Hubert Tong Date: 2020-03-23[Accepted at the November, 2020 meeting.]
According to 13.7.5 [temp.friend] paragraph 9,
A non-template friend declaration with a requires-clause shall be a definition. A friend function template with a constraint that depends on a template parameter from an enclosing template shall be a definition. Such a constrained friend function or function template declaration does not declare the same function or function template as a declaration in any other scope.
However, this specification conflicts with the treatment of functions with C language linkage in 9.12 [dcl.link] paragraph 7:
At most one function with a particular name can have C language linkage. Two declarations for a function with C language linkage with the same function name (ignoring the namespace names that qualify it) that appear in different namespace scopes refer to the same function.
For example:
template <typename T> struct A { struct B; }; extern "C" { template <typename T> struct A<T>::B { friend void f(B *) requires true {} // C language linkage applies }; } namespace Q { extern "C" void f(); // ill-formed redeclaration? }
Proposed resolution (April, 2020):
Change 9.12 [dcl.link] paragraph 5 as follows:
...A C language linkage is ignored in determining the language linkage of the names of class members , the names of friend functions with a trailing requires-clause, and the function type of class member functions...
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4