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