diff options
-rw-r--r-- | lib/Parse/ParseDeclCXX.cpp | 2 | ||||
-rw-r--r-- | test/CXX/temp/temp.decls/temp.mem/p1.cpp | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp index bccfc6ad62..993ec3dfd4 100644 --- a/lib/Parse/ParseDeclCXX.cpp +++ b/lib/Parse/ParseDeclCXX.cpp @@ -1084,7 +1084,7 @@ Parser::BaseResult Parser::ParseBaseSpecifier(DeclPtrTy ClassDecl) { // Parse optional '::' and optional nested-name-specifier. CXXScopeSpec SS; - ParseOptionalCXXScopeSpecifier(SS, /*ObjectType=*/0, true); + ParseOptionalCXXScopeSpecifier(SS, /*ObjectType=*/0, false); // The location of the base class itself. SourceLocation BaseLoc = Tok.getLocation(); diff --git a/test/CXX/temp/temp.decls/temp.mem/p1.cpp b/test/CXX/temp/temp.decls/temp.mem/p1.cpp index 1b9da84886..b057eedf93 100644 --- a/test/CXX/temp/temp.decls/temp.mem/p1.cpp +++ b/test/CXX/temp/temp.decls/temp.mem/p1.cpp @@ -14,3 +14,22 @@ int foo() { A<bool>::cond = true; return A<bool>::B<int>::twice(4); } + +namespace PR6376 { + template<typename T> + struct X { + template<typename Y> + struct Y { }; + }; + + template<> + struct X<float> { + template<typename Y> + struct Y { }; + }; + + template<typename T, typename U> + struct Z : public X<T>::template Y<U> { }; + + Z<float, int> z0; +} |