Я хочу шаблонизировать оператор приведения со специализацией для bool, но он не работает.
template<typename T> //Don't know if the fact that C is templated itself is relevant here
class C
{
...
template<typename U> operator U() const { return another_namespace::MyCast<U>(*this); }
template<> operator bool() const { return IsValid(); }
};
Это дает мне (g ++ 4.6)
явная специализация в не-namespace scope 'class C '
Теперь просто
operator bool() const { return IsValid(); }
само по себе работает, как и MyCast (это функция друга, объявленная во внешнем пространстве имен).Есть ли какой-нибудь способ, которым я могу получить намеченный бехавиор здесь?
Редактировать: впоследствии я нашел этот , похоже на тот же основной вопрос, однако ответ (который дает очень сложное решение)выглядит разработан специально для струн.Кроме того, проблема оказалась неоднозначной, которая, я думаю, здесь не проблема - я получаю совершенно другое сообщение об ошибке компилятора.