Endill created this revision. Endill added a reviewer: clang-language-wg. Herald added a project: All. Endill requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
P1787 <https://reviews.llvm.org/P1787>: "CWG360 is resolved by applying access control to using-declarations." class.access.general#4 <http://eel.is/c++draft/class.access#general-4.sentence-3>: "When a using-declarator is named, access control is applied to it, not to the declarations that replace it." Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D139090 Files: clang/test/CXX/drs/dr3xx.cpp Index: clang/test/CXX/drs/dr3xx.cpp =================================================================== --- clang/test/CXX/drs/dr3xx.cpp +++ clang/test/CXX/drs/dr3xx.cpp @@ -890,6 +890,33 @@ }; } +namespace dr360 { // dr360: yes +struct A { + int foo(); + int bar(); + +protected: + int baz(); +}; + +struct B : A { +private: + using A::foo; // #dr360-foo-using-decl +protected: + using A::bar; // #dr360-bar-using-decl +public: + using A::baz; // #dr360-baz-using-decl +}; + +int main() { + int foo = B().foo(); // expected-error {{is a private member}} + // expected-note@#dr360-foo-using-decl {{declared private here}} + int bar = B().bar(); // expected-error {{is a protected member}} + // expected-note@#dr360-bar-using-decl {{declared protected here}} + int baz = B().baz(); +} +} // namespace dr360 + // dr362: na // dr363: na
Index: clang/test/CXX/drs/dr3xx.cpp =================================================================== --- clang/test/CXX/drs/dr3xx.cpp +++ clang/test/CXX/drs/dr3xx.cpp @@ -890,6 +890,33 @@ }; } +namespace dr360 { // dr360: yes +struct A { + int foo(); + int bar(); + +protected: + int baz(); +}; + +struct B : A { +private: + using A::foo; // #dr360-foo-using-decl +protected: + using A::bar; // #dr360-bar-using-decl +public: + using A::baz; // #dr360-baz-using-decl +}; + +int main() { + int foo = B().foo(); // expected-error {{is a private member}} + // expected-note@#dr360-foo-using-decl {{declared private here}} + int bar = B().bar(); // expected-error {{is a protected member}} + // expected-note@#dr360-bar-using-decl {{declared protected here}} + int baz = B().baz(); +} +} // namespace dr360 + // dr362: na // dr363: na
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits