9

次のコードがコンパイルされない理由を知りたいです。

class base {
protected:
  typedef void (base::*function_type)() const;
  void function_impl() const {} // error: ‘void base::function_impl() const’ is protected
};

class derived: public base {
public:
  operator function_type() const {
    return boolean_test() == true ? &base::function_impl : 0; // error: within this context
  }

protected:
  virtual bool boolean_test() const = 0;
  virtual ~derived() {}
};

int main(int argc, char* argv[]) {
}

g++出力:

~/protected_test$ g++ src/protected_test.cpp
src/protected_test.cpp: In member function ‘derived::operator base::function_type() const’:
src/protected_test.cpp:4:8: error: ‘void base::function_impl() const’ is protected
src/protected_test.cpp:10:44: error: within this context

このコードはhereから改作されたもので、ディスカッション フォーラムでそれについて文句を言う人は誰もいません。また、私は g++ 4.7.2 を使用しており、同じコードがコンパイルされ、egcs-2.91.66 で正常にリンクされます。

4

1 に答える 1