We recommend using Visual Studio 2017

Compiler Error C2357


The latest version of this topic can be found at Compiler Error C2357.

identifier' : must be a function of type 'type'

Your code declares a version of the atexit function that does not match the version declared internally by the compiler. Declare atexit as follows:

int __cdecl atexit(void (__cdecl *)());  

For more information, see init_seg.

The following sample generates C2357:

// C2357.cpp  
// compile with: /c  
// C2357 expected  
#pragma warning(disable : 4075)  
// Uncomment the following line to resolve.  
// int __cdecl myexit(void (__cdecl *)());  
#pragma init_seg(".mine$m",myexit)