I have the following:
class obj
{
template<typename T>
inline int foo(T val) const;
};
template<typename T>
int obj::foo(T val) const
{
//Do something for PODs
}
template<>
int obj::foo<std::vector<bool>::reference>(std::vector<bool>::reference val) const
{
//Do something for a boolean in vector of booleans.
}
template<>
int obj::foo<std::string>(std::string var) const
{
//Do something for string.
}
FreeBSD 用に g++ でコンパイルすると、コンパイラは次のように文句を言います。
In function int obj::foo<std::_Bit_reference>(std::_Bit_reference) const':
/path/to/file.h:22: multiple definition of int obj::foo<std::_Bit_reference>(std::_Bit_reference) const'
/path/to/file.h:22 first defined here
std::string についても同じです。
In function int obj::foo<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const':
などなど
ここで何が問題なのかわかりません。誰かがこれで私を助けてくれますか?