хранение с определения функций шаблона .файл cpp


У меня есть некоторые код шаблона, что я предпочел бы хранить в cpp файл, а не встроенный в заголовке. Я знаю, что это может быть сделано, как долго, как вы знаете, какие типы шаблонов будет использоваться. Например:

.h file
class foo{public:    template <typename T>    void do(const T& t);};
.cpp file
template <typename T>void foo::do(const T& t){    // Do something with t}template void foo::do<int>(const int&);template void foo::do<std::string>(const std::string&);

Обратите внимание на две последние строки - переменная foo::функция сделать шаблон используется только с ИНЦ и std::строки, так что эти определения означают, что приложение будет ссылка.

Мой вопрос - это неприятный Хак или будет ли это работать с другими компиляторы/линкеры? Я только использую этот код с VS2008 на данный момент, но будет хотеть порта в другой среде.