Differences from Other Implementations
The following list shows some differences between Microsoft C++ and other compilers.
The compiler cannot instantiate a template outside of the module in which it is defined. Visual C++ does not support the export keyword.
Templates cannot be used with functions declared with __declspec (dllimport) or __declspec (dllexport).
All template arguments must be of an unambiguous type that exactly matches that of the template parameter list. For example:
template< class T > T check( T ); template< class S > void watch( int (*)(S) ); watch( check ); //error
The compiler should instantiate the check templated function in the form int check( int ), but the inference cannot be followed.
When resolving names used in class templates or function templates, all names are treated as dependent names. See Name Resolution for Dependent Types
In a class template, the template parameter can be redefined in the scope of the class definition. See Name Resolution for Locally Declared Names