1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2c149412d3adfc28ce1f1c0cf6d3701f9491adaf0Eli Friedmantemplate<int i> struct x { 3c149412d3adfc28ce1f1c0cf6d3701f9491adaf0Eli Friedman static const int j = i; 4c149412d3adfc28ce1f1c0cf6d3701f9491adaf0Eli Friedman x<j>* y; 5c149412d3adfc28ce1f1c0cf6d3701f9491adaf0Eli Friedman}; 6c149412d3adfc28ce1f1c0cf6d3701f9491adaf0Eli Friedman 7cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregortemplate<int i> 8cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorconst int x<i>::j; 9cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 10cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorint array0[x<2>::j]; 11cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 12cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregortemplate<typename T> 13cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorstruct X0 { 14cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor static const unsigned value = sizeof(T); 15cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor}; 16cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 17cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregortemplate<typename T> 18cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorconst unsigned X0<T>::value; 19cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 20cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorint array1[X0<int>::value == sizeof(int)? 1 : -1]; 21cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 22cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorconst unsigned& testX0() { return X0<int>::value; } 23cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 24cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorint array2[X0<int>::value == sizeof(int)? 1 : -1]; 25cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 26cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregortemplate<typename T> 27cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorstruct X1 { 28cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor static const unsigned value; 29cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor}; 30cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 31cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregortemplate<typename T> 32cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregorconst unsigned X1<T>::value = sizeof(T); 33cf3293eaeb3853d12cff47e648bbe835004e929fDouglas Gregor 343e9ea0b8cd7c4691d62e385245556be5fded58a7Richard Smithint array3[X1<int>::value == sizeof(int)? 1 : -1]; 35