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;
}
};
エラーメッセージ:保護されたメンバーアクセスエラー
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