Поделиться через


Отличия от других реализаций

Блок, относящийся только к системам 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 ), но отследить вывод невозможно.

  • При разрешении имен, используемых в шаблонах классов или шаблонах функций, все имена обрабатываются как зависимые имена. См. раздел Разрешение имен для зависимых типов.

  • В шаблоне класса параметр шаблона можно переопределить в области определения класса. См. раздел Разрешение локально объявленных имен.

См. также

Другие ресурсы

Шаблоны