This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 113d. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2024-03-20


1703. Language linkage of names of functions with internal linkage

Section: 9.11  [dcl.link]     Status: NAD     Submitter: Richard Smith     Date: 2013-06-17

Issue 4 separated the concepts of language linkage for names and language linkage for types; since the names of functions with internal linkage are not visible outside their (C++) translation unit, there is no need to restrict overloading of extern "C" functions with internal linkage, e.g.,

  extern "C" {
    static void f();
    static void f(int);
  }

although the types of such functions still have C language linkage and thus can be called via a function pointer from C code.

The change permitting such overloading, however, has not been widely implemented since the resolution of issue 4, leading some to suggest that the unnecessary restriction on function overloading of such functions should be reimposed.

If it is decided to keep the resolution of issue 4, 9.11 [dcl.link] paragraph 6 should be clarified:

At most one function with a particular name can have C language linkage.

Presumably this was overlooked in implementing the intent of the resolution for the issue and is a likely explanation for the reason it is not more widely implemented.

Rationale (September, 2013):

There was no consensus in CWG for a change to the current rules. 9.11 [dcl.link] paragraph 6 should be read as applying to the C language linkage of the name, not the function type.