Код:
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 этот код компилируется без ошибок.
Обходные пути как сделать такую специализацию имеются.
Кто-нибудь с таким сталкивался?
Здравствуйте, SX, Вы писали:
SX>Кто-нибудь с таким сталкивался?
а разве так можно: const SomeType& = SomeType()?
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Здравствуйте, serg baburin, Вы писали:
SB>а разве так можно: const SomeType& = SomeType()?
Не много подумал

— можно — константная ссылка может быть инициализирована r-value.
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Здравствуйте, serg baburin, Вы писали:
SB>Здравствуйте, serg baburin, Вы писали:
SB>>а разве так можно: const SomeType& = SomeType()?
SB>Не много подумал
— можно — константная ссылка может быть инициализирована r-value.
А зачем, если не секрет?
это что-то типа такого: const SomeType & SomeObject = SomeType()?
Здравствуйте, Аноним, Вы писали:
А>А зачем, если не секрет?
А>это что-то типа такого: const SomeType & SomeObject = SomeType()?
Да. В оригинале было такое:
template <typename CharType, typename StrType>
std::basic_string<CharType> convert(const StrType& str, std::locale& loc = std::locale());
// ... и соответствующие специализации для некоторых StrType
Ошибочка...
SX>SX>template <typename CharType, typename StrType>
SX>std::basic_string<CharType> convert(const StrType& str, const std::locale& loc = std::locale());
SX>// ... и соответствующие специализации для некоторых StrType
SX>