зеркало из https://github.com/microsoft/clang-1.git
Static data members intialized in-class that have constant values are
value-dependent if their initializers are value-dependent; my recent tweak to these dependent rules overstepped by taking away this value-dependents. Fixes a Boost.GIL regression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103476 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
84c580f6f3
Коммит
85bcd99205
|
@ -156,7 +156,7 @@ void DeclRefExpr::computeDependence() {
|
|||
// (VD) - a constant with integral or enumeration type and is
|
||||
// initialized with an expression that is value-dependent.
|
||||
else if (VarDecl *Var = dyn_cast<VarDecl>(D)) {
|
||||
if (Var->getType()->isIntegralType() && !Var->isStaticDataMember() &&
|
||||
if (Var->getType()->isIntegralType() &&
|
||||
Var->getType().getCVRQualifiers() == Qualifiers::Const) {
|
||||
if (const Expr *Init = Var->getAnyInitializer())
|
||||
if (Init->isValueDependent())
|
||||
|
|
|
@ -151,3 +151,16 @@ struct X1 {
|
|||
X1<T*>::a = b;
|
||||
}
|
||||
};
|
||||
|
||||
namespace ConstantInCurrentInstantiation {
|
||||
template<typename T>
|
||||
struct X {
|
||||
static const int value = 2;
|
||||
static int array[value];
|
||||
};
|
||||
|
||||
template<typename T> const int X<T>::value;
|
||||
|
||||
template<typename T>
|
||||
int X<T>::array[X<T>::value] = { 1, 2 };
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче