c++functionvisual-c++

Zero as a function name


The following example compiles (VS2010 C++ compiler issues a warning C4353 though) and expression (*) evaluates to 0:

#include <iostream>
#include <string>

int main()
{
   0(1, "test"); // (*) - any number and type of arguments allowed       
   int n = 0(1, "test"); // 0
   std::string str(0(1, "test")); // Debug assertion fails - 0 pointer passed
}

Is using 0 as a function name allowed/regulated by C++ standard or its resolution is compiler-specific? I was looking in the N3242 draft but could not find anything related to this. Microsoft compiler obviously resolves such construct (or one with __noop) as an integer with value 0.

warning C4353:

warning C4353: nonstandard extension used: constant 0 as function expression. Use __noop function intrinsic instead


Solution

  • A function name is an identifier and an identifier needs to start with a non-digit (§2.11):

    identifier:
        identifier-nondigit
        identifier identifier-nondigit
        identifier digit