template<typename T>
T foo(std::string key, T &def_value) {return def_value;}
template<>
std::string foo<std::string>(std::string key, std::string &def_value) {return def_value;}
致命的なエラーLNK1169:1つ以上の複数定義されたシンボルが見つかりました
2番目の定義を削除すると、正常にコンパイルされます。