Отличия от других реализаций
Блок, относящийся только к системам Microsoft
Ниже перечислены некоторые различия между Microsoft C++ и другими компиляторами.
Компилятор не может создать экземпляр шаблона вне модуля, в котором он определен. Visual C++ не поддерживает ключевое слово export.
Шаблоны невозможно использовать с функциями, объявленными с __declspec (dllimport) или __declspec (dllexport).
Все аргументы шаблона должны принадлежать явно выраженному типу, который точно соответствует типу списка параметров шаблона. Например:
template< class T > T check( T ); template< class S > void watch( int (*)(S) ); watch( check ); //error
Компилятор должен создать экземпляр шаблонной функции check в форме int check( int ), но отследить вывод невозможно.
При разрешении имен, используемых в шаблонах классов или шаблонах функций, все имена обрабатываются как зависимые имена. См. раздел Разрешение имен для зависимых типов.
В шаблоне класса параметр шаблона можно переопределить в области определения класса. См. раздел Разрешение локально объявленных имен.