Replaceable allocation and deallocation functions in the global module
10.1 [module.unit]
Gabriel dos Reis

Created on 2022-06-17.00:00:00 last changed yesterday


Date: 2022-06-15.00:00:00

Additional notes (June, 2022):

Forwarded to EWG with paper issue 1273, by decision of the CWG chair.

Date: 2022-06-17.00:00:00

Subclause 10.1 [module.unit] paragraph 7 implicitly attaches the replaceable global allocation or deallocation functions to the global module. Now that extern "C++" can be used to introduce declarations in the global module, even when in the purview of a named module, the provision seems superfluous.

Possible resolution:

  1. Change in [basic.stc.dynamic.general] paragraph 2 as follows:

    The library provides default definitions for the global allocation and deallocation functions. Some global allocation and deallocation functions are replaceable (17.6.3 [new.delete]). A C++ program shall provide at most one definition of a replaceable allocation or deallocation function. Any such function definition replaces the default version provided in the library ( [replacement.functions]). The following allocation and deallocation functions (17.6 [support.dynamic]) are implicitly declared in global scope in each translation unit of a program and are attached to the global module (10.1 [module.unit]).
  2. Change in 10.1 [module.unit] bullet 7.2 as follows:

    • If the declaration is ...
    • Otherwise, if the declaration
      • is a replaceable global allocation or deallocation function ( [new.delete.single], [new.delete.array]), or
      • is a namespace-definition with external linkage, or
      • appears within a linkage-specification (9.11 [dcl.link]),
      it is attached to the global module.
    • Otherwise, ...
Date User Action Args
2022-06-25 06:02:42adminsetmessages: + msg6870
2022-06-17 00:00:00admincreate