class safe_bool_base {
protected:
void this_type_does_not_support_comparisons() const {}
};
template <typename T=void> class safe_bool : public safe_bool_base {
public:
void func() {
&safe_bool::this_type_does_not_support_comparisons;
&safe_bool_base::this_type_does_not_support_comparisons;
}
};
template<> class safe_bool<void> : public safe_bool_base {
public:
void func() {
&safe_bool::this_type_does_not_support_comparisons;
&safe_bool_base::this_type_does_not_support_comparisons;
}
};
Сообщения об ошибке:Protected ошибки доступа члена в специализации шаблона
zzz.cpp: In member function 'void safe_bool<void>::func()':
zzz.cpp:7:10: error: 'void safe_bool_base::this_type_does_not_support_comparison
s() const' is protected
void this_type_does_not_support_comparisons() const {}
^
zzz.cpp:22:24: error: within this context
&safe_bool_base::this_type_does_not_support_comparisons;
^
Интересно, почему защищенный член не может быть посещен в специализации шаблона. Коды не имеют смысла и просто для тестирования.
На самом деле 'safe_bool_base :: this_type_does_not_support_comparisons()' работает хорошо, но '& safe_bool_base :: this_type_does_not_support_comparisons' (с адресом функции) этого не делает. Поэтому я хочу выяснить проблему. – immiao