Может ли статический метод в производном классе вызвать защищенный конструктор в C ++? - PullRequest
21 голосов
/ 30 августа 2011

Этот код работает с clang, но g ++ говорит:

ошибка: 'A :: A ()' защищен

class A
{
protected:
    A() {}
};

class B : public A
{
    static A f() { return A(); } // GCC claims this is an error
};

Какой компилятор прав?

1 Ответ

11 голосов
/ 30 августа 2011

г ++ правильно.

Стандарт C ++ & sect; 11.5 / 1 гласит, что "<...> доступ должен осуществляться через указатель, ссылку или объект самого класса производного <...>" , В случае конструкторов это означает, что B разрешено вызывать защищенный конструктор A только для создания своего собственного подобъекта.

Проверьте эту связанную проблему в g ++. Он был закрыт как не ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...