Прежде всего: большинство компиляторов (включая gcc, Clang и Visual Studio) не поддерживают ключевое слово export
.
Он был реализован в одном интерфейсе: интерфейс EDG, и, таким образом, только компиляторы, которые его используют (Comeau и icc), поддерживают эту функцию. Отзывы разработчиков из EDG были чрезвычайно просты: это заняло у нас время, было чрезвычайно сложно, мы рекомендуем не реализовывать это (1), как следствие, оно было отброшено в C ++ 0x.
Теперь стандарт позволяет (и это реализуется по крайней мере gcc):
- для объявления специализированной версии функции шаблона в заголовке
- для определения этой специализации в одном исходном файле
и заставить его вести себя так, как вы ожидаете от обычной функции.
Примечание: как указывает Йоханнес в комментарии, если в заголовке определена полная специализация функции, она должна быть помечена как встроенная, в противном случае компоновщик будет жаловаться.
EDIT:
(1) Наконец-то нашел мою ссылку Почему мы не можем позволить себе экспорт (PDF) Тома Плам, обзор Стив Адамчик, Джон Спайсер и Дэйвид Вандеворде из Edison Design Group, которые изначально реализовали его в передний конец EDG.