Есть такой код:
class Base
{
public:
void MethodA() {}
void MethodB() {}
};
class BaseWrapper: public Base
{
private:
using Base::MethodA;
};
class SomeImpl: private BaseWrapper
{
public:
void MethodA() { BaseWrapper::MethodA(); }
void MethodB() { BaseWrapper::MethodB(); }
};
int main()
{
SomeImpl v;
v.MethodA();
v.MethodB();
return 0;
}
При компиляции MSVC 7.1 в строке "void MethodA() { BaseWrapper::MethodA(); }" имеет место ошибка "... error C2248: 'BaseWrapper::MethodA' : cannot access private member declared in class 'BaseWrapper'"
Компиляция этого же кода с помощью Comeau C/C++ 4.3.3 (online) выполняется без ошибок.
Стандарт по поводу using-declaration в 7.3.3/15 говорит: "The alias created by the using-declaration has the usual accessibility for a member-declaration" (что в моем понимании означает, что уровень доступа к using-объявлению в классе определяется так же, как и для объявления члена класса, т.е. по private/protected/public).
Из этого делаю вывод, что ошибается в данном случае Comeau, однако, возможно, я что-то упустил. Поэтому хочу узнать мнение многоуважаемого All по вышеописанной проблеме.
Здравствуйте, Aznog, Вы писали:
A>Есть такой код:
код поскипал
A>При компиляции MSVC 7.1 в строке "void MethodA() { BaseWrapper::MethodA(); }" имеет место ошибка "... error C2248: 'BaseWrapper::MethodA' : cannot access private member declared in class 'BaseWrapper'"
A>Компиляция этого же кода с помощью Comeau C/C++ 4.3.3 (online) выполняется без ошибок.
A>Стандарт по поводу using-declaration в 7.3.3/15 говорит: "The alias created by the using-declaration has the usual accessibility for a member-declaration" (что в моем понимании означает, что уровень доступа к using-объявлению в классе определяется так же, как и для объявления члена класса, т.е. по private/protected/public).
A>Из этого делаю вывод, что ошибается в данном случае Comeau, однако, возможно, я что-то упустил. Поэтому хочу узнать мнение многоуважаемого All по вышеописанной проблеме.
Как я понял вопрос открытый
Issue 360
Вот ещё можешь почитать
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/1996/N0852.pdf
Но я склоняюсь всё таки к тому что в данном случае Comeau прав.
Здравствуйте, korzhik, Вы писали:
K>Как я понял вопрос открытый Issue 360
K>Вот ещё можешь почитать http://www.open-std.org/JTC1/SC22/WG21/docs/papers/1996/N0852.pdf
K>Но я склоняюсь всё таки к тому что в данном случае Comeau прав.
Спасибо за ссылки, это прояснило ситуацию — действительно, Comeau в данной ситуации выглядит "правее".