diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-05-13 06:47:56 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-05-13 06:47:56 +0000 |
commit | 12e7931d0b497c1ff8a5f3389b88315140765695 (patch) | |
tree | e6f29915317f3c269c16e1ada6d5eed058e0cd65 /clang/test/CXX | |
parent | 845d0d74bafd709b2179df73af4069ef459bf72f (diff) | |
download | bcm5719-llvm-12e7931d0b497c1ff8a5f3389b88315140765695.tar.gz bcm5719-llvm-12e7931d0b497c1ff8a5f3389b88315140765695.zip |
Add support for derived class special members hiding functions brought in from
a base class via a using-declaration. If a class has a using-declaration
declaring either a constructor or an assignment operator, eagerly declare its
special members in case they need to displace a shadow declaration from a
using-declaration.
llvm-svn: 269398
Diffstat (limited to 'clang/test/CXX')
-rw-r--r-- | clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp b/clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp index cc28bf6c28c..ce43720cb2d 100644 --- a/clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp +++ b/clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp @@ -1,3 +1,5 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s // RUN: %clang_cc1 -fsyntax-only -verify %s // C++03 [namespace.udecl]p12: @@ -161,3 +163,33 @@ namespace test4 { d.bar<int>(3); // expected-error {{'bar' is a protected member}} } } + +namespace test5 { + struct Derived; + struct Base { + void operator=(const Derived&); + }; + struct Derived : Base { + // Hidden by implicit derived class operator. + using Base::operator=; + }; + void f(Derived d) { + d = d; + } +} + +#if __cplusplus >= 201103L +namespace test6 { + struct Derived; + struct Base { + void operator=(Derived&&); + }; + struct Derived : Base { + // Hidden by implicit derived class operator. + using Base::operator=; + }; + void f(Derived d) { + d = Derived(); + } +} +#endif |