Я знаю, что статические средства в контексте объявления глобальных не-шаблонных функций (см. например, " Что такое" статическая "функция?), Что полезно, если вы пишете вспомогательную функцию в заголовке, который включен из нескольких разных местоположений, и хотите избегайте ошибок "повторного определения".
Поэтому мой вопрос: что означает статическое значение в контексте объявления глобальных функций шаблона? Обратите внимание, что я специально спрашиваю о глобальных, нечленовных функциях шаблона, которые не принадлежат классу.
Другими словами, в чем разница между следующими двумя:
template <typename T>
void foo(T t)
{
/* implementation of foo here */
}
template <typename T>
static void bar(T t)
{
/* implementation of bar here */
}
Обратите внимание, что функция шаблона фактически не компилируется, если не требуется экземпляр этой функции шаблона.
Затем этот экземпляр имеет те же свойства, что и статическая функция без шаблона: т.е. Тот экземпляр, исходящий из его соответствующей единицы компиляции, будет невидим для других единиц компиляции, включая компоновщик.
static inline
в C99. Таким образом, здесь не должно быть никакой разницы.