From mboxrd@z Thu Jan 1 00:00:00 1970 From: oliver@mpi-sb.mpg.de To: gcc-gnats@gcc.gnu.org Subject: c++/3300: using declaration does not change member accessibility correctly Date: Wed, 20 Jun 2001 11:46:00 -0000 Message-id: <20010620184330.29248.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00846.html List-Id: >Number: 3300 >Category: c++ >Synopsis: using declaration does not change member accessibility correctly >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Jun 20 11:46:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: g++ >Release: 3.0 >Organization: >Environment: Suse Linux 7.1/ kernel 2.2.18 >Description: The using-declaration in the example below does not change the accessibility of the foo-members as expected. According to the ISO-C++ standard (section 7.3.3/14), "all instances of the name mentioned in a using-declaration shall be accessible". In the example, g++ grants access only to the const version of foo, not to the mutable variant and thus complains with test.C:19: assignment of read-only location. Another funny thing: changing the declaration order of the two foo versions in the base class makes the mutable version available and lets g++ compile the code. g++ 2.95.3 did not have that kind of trouble. >How-To-Repeat: class A { public: int& foo() { return x; } const int& foo() const { return x; } int x; }; class B : private A { public: using A::foo; }; int main() { B b; b.foo() = 5; } >Fix: >Release-Note: >Audit-Trail: >Unformatted: