llvm-project/clang/test/SemaTemplate/instantiate-declref-ice.cpp
Richard Smith ed2974f3cf C++ constant expression handling: eagerly instantiate static const integral data
members of class templates so that their values can be used in ICEs. This
required reverting r105465, to get such instantiated members to be included in
serialized ASTs.

llvm-svn: 147023
2011-12-21 00:25:33 +00:00

35 lines
640 B
C++

// RUN: %clang_cc1 -fsyntax-only -verify %s
template<int i> struct x {
static const int j = i;
x<j>* y;
};
template<int i>
const int x<i>::j;
int array0[x<2>::j];
template<typename T>
struct X0 {
static const unsigned value = sizeof(T);
};
template<typename T>
const unsigned X0<T>::value;
int array1[X0<int>::value == sizeof(int)? 1 : -1];
const unsigned& testX0() { return X0<int>::value; }
int array2[X0<int>::value == sizeof(int)? 1 : -1];
template<typename T>
struct X1 {
static const unsigned value;
};
template<typename T>
const unsigned X1<T>::value = sizeof(T);
int array3[X1<int>::value == sizeof(int)? 1 : -1];