This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
[Accepted at the July, 2022 meeting.]
Consider:
template<class T> int main(T) {}
C++20 specified in 6.9.3.1 [basic.start.main] paragraph 2:
An implementation shall not predefine the main function. This function shall not be overloaded.
While it is unclear what "overloaded" means when multiple translation units are involved, it arguably disallowed function templates called main. This prohibition was removed with P1787R6 (Declarations and where to find them).
Proposed resolution (approved by CWG 2022-06-17):
Change in 6.9.3.1 [basic.start.main] paragraph 3 and add bullets as follows:
... A program that declaresis ill-formed. The name main is not otherwise reserved.
- a variable main that belongs to the global scope, or
that declaresa function main that belongs to the global scope and is attached to a named module, or- a function template main that belongs to the global scope, or
that declaresan entity named main with C language linkage (in any namespace)