1 // PR c++/51385 2 3 template <__SIZE_TYPE__ N> struct NTmpl; 4 template <typename T, typename U, typename V = NTmpl<sizeof(T *)> > 5 struct PtrConvs { 6 enum { bad = 1 }; 7 }; 8 9 template <typename Target, typename Source> 10 struct PtrConvs<Target, Source, NTmpl<sizeof (*(Target **)0 = (Source *)0)> >; 11 12 template<typename T> struct test { static const bool value = true; }; 13 template<> struct test<short> { static const bool value = false; }; 14 15 template <typename T> 16 struct FussyTemplate 17 { 18 int sa[test<T>::value ? 1 : -1]; 19 }; 20 21 struct B { }; 22 23 typedef char chk[1]; 24 typedef char chk[PtrConvs<FussyTemplate<short>, B>::bad]; 25