Armazenando definições de função de modelo C ++ em um arquivo .CPP

Eu tenho algum código de modelo que eu preferiria ter armazenado em um arquivo CPP em vez de inline no cabeçalho. Eu sei que isso pode ser feito desde que você saiba quais tipos de modelo serão usados. Por exemplo:

arquivo .h

class foo
{
public:
    template <typename T>
    void do(const T& t);
};

arquivo .cpp

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&);

Observe as duas últimas linhas - a função foo :: do template é usada apenas com ints e std :: strings, então essas definições significam que o aplicativo irá linkar.

Minha pergunta é - isso é um truque desagradável ou isso funcionará com outros compiladores / linkers? Eu estou usando apenas este código com VS2008 no momento, mas estará querendo portar para outros ambientes.

questionAnswers(11)

yourAnswerToTheQuestion