Я специализирую "меньше" (предикат) для типа данных.
Код выглядит следующим образом:
template<>
struct std::less<DateTimeKey>
{
bool operator()(const DateTimeKey& k1, const DateTimeKey& k2) const
{
// Some code ...
}
}
При компиляции (g++ 4.4.1 на Ubuntu 9.10) я получаю сообщение об ошибке:
Специализация "struct struct std:: less" в разных пространствах имен
Я провел некоторое исследование и обнаружил, что существует "обходное решение", связанное с завершением специализации в пространстве имен std, то есть с изменением кода на:
namespace std {
template<>
struct less<DateTimeKey>
{
bool operator()(const DateTimeKey& k1, const DateTimeKey& k2) const
{
// Some code ...
}
}
}
который действительно закрывает компилятор. Однако это решение было от должности 5 лет ( "Великим" Виктором Базарофом не менее [неумышленно]. Является ли это исправление до сих пор, или есть лучший способ разрешить это, или же "старый способ" по-прежнему действителен?