Код:
typedef std::string SomeType;
template <typename T> void f(T, const SomeType& = SomeType())
{}
template <> void f<int>(int, const SomeType&)
{}
int main()
{
f(10); // (1)
f(10); // (2)
f(10); // (3)
return 0;
}
При компиляции выдаются ошибки в строках (2) и (3):
cannot convert from "SomeType*" to "const SomeType&". Причем, если SomeType — встроенный тип, например, short или int, то компиляция проходит без ошибок.
В компиляторе MinGW 3.4.5 этот код компилируется без ошибок.
Обходные пути как сделать такую специализацию имеются.
Кто-нибудь с таким сталкивался?