зеркало из https://github.com/microsoft/clang-1.git
Change the context correctly when instantiating a static data member definition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125517 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
b641f08cbe
Коммит
f5ba7e089d
|
@ -2434,13 +2434,13 @@ void Sema::InstantiateStaticDataMemberDefinition(
|
|||
|
||||
// Enter the scope of this instantiation. We don't use
|
||||
// PushDeclContext because we don't have a scope.
|
||||
DeclContext *PreviousContext = CurContext;
|
||||
CurContext = Var->getDeclContext();
|
||||
ContextRAII previousContext(*this, Var->getDeclContext());
|
||||
|
||||
VarDecl *OldVar = Var;
|
||||
Var = cast_or_null<VarDecl>(SubstDecl(Def, Var->getDeclContext(),
|
||||
getTemplateInstantiationArgs(Var)));
|
||||
CurContext = PreviousContext;
|
||||
|
||||
previousContext.pop();
|
||||
|
||||
if (Var) {
|
||||
MemberSpecializationInfo *MSInfo = OldVar->getMemberSpecializationInfo();
|
||||
|
|
|
@ -498,3 +498,13 @@ namespace rdar8876150 {
|
|||
return !b;
|
||||
}
|
||||
}
|
||||
|
||||
namespace test23 {
|
||||
template <typename T> class A {
|
||||
A();
|
||||
static A instance;
|
||||
};
|
||||
|
||||
template <typename T> A<T> A<T>::instance;
|
||||
template class A<int>;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче