diff options
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 3 | ||||
-rw-r--r-- | test/CXX/class.derived/class.virtual/p3-0x.cpp | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 9981b1f6c8..b9d760b412 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -858,6 +858,9 @@ void Sema::CheckOverrideControl(const Decl *D) { if (!MD || !MD->isVirtual()) return; + if (MD->isDependentContext()) + return; + // C++0x [class.virtual]p3: // If a virtual function is marked with the virt-specifier override and does // not override a member function of a base class, diff --git a/test/CXX/class.derived/class.virtual/p3-0x.cpp b/test/CXX/class.derived/class.virtual/p3-0x.cpp index 83f1eb0439..773b9f6077 100644 --- a/test/CXX/class.derived/class.virtual/p3-0x.cpp +++ b/test/CXX/class.derived/class.virtual/p3-0x.cpp @@ -1,5 +1,7 @@ // RUN: %clang_cc1 -fsyntax-only -std=c++0x -verify %s +namespace Test1 { + struct B { virtual void f(int); }; @@ -8,3 +10,17 @@ struct D : B { virtual void f(long) override; // expected-error {{'f' marked 'override' but does not override any member functions}} void f(int) override; }; +} + +namespace Test2 { + +struct A { + virtual void f(int, char, int); +}; + +template<typename T> +struct B : A { + virtual void f(T) override; +}; + +} |