@@ -4950,6 +4950,41 @@ class TestSimplifyTemplate : public TestFixture {
49504950 " return 0 ; "
49514951 " }" , tok (code));
49524952 }
4953+ {
4954+ // #14975
4955+ const char code[] = " template <typename T, int N>\n "
4956+ " struct I;\n "
4957+ " template <typename T,\n "
4958+ " int N = (sizeof(T) > 8 ? 8 : sizeof(T))>\n "
4959+ " struct A {\n "
4960+ " I<T, N> begin() { return I<T, N>(this); }\n "
4961+ " };\n "
4962+ " template <typename T, int N>\n "
4963+ " struct I {\n "
4964+ " I(A<T, N>* a);\n "
4965+ " A<T, N>* p;\n "
4966+ " };\n "
4967+ " template <typename T, int N>\n "
4968+ " inline I<T, N>::I(A<T, N>* a) : p(a) {}\n "
4969+ " void f() { A<X> x; }\n " ;
4970+ TODO_ASSERT_EQUALS (
4971+ " Fix template arg" ,
4972+ " template < typename T , int N > struct I ; "
4973+ " struct A<X,(sizeof(X)>8)> ; "
4974+ " template < typename T , int N > struct I { "
4975+ " I ( A < T , N > * a ) ; "
4976+ " A < T , N > * p ; "
4977+ " } ; "
4978+ " I<X,(sizeof(X)>8)> :: I<X,(sizeof(X)>8)> ( A < X , ( sizeof ( X ) > 8 ) > * a ) ; "
4979+ " void f ( ) { "
4980+ " A<X,(sizeof(X)>8)> x ; "
4981+ " } "
4982+ " struct A<X,(sizeof(X)>8)> { "
4983+ " I<X,(sizeof(X)>8)> begin ( ) { return I<X,(sizeof(X)>8)> ( this ) ; } "
4984+ " } ; "
4985+ " I<X,(sizeof(X)>8)> :: I<X,(sizeof(X)>8)> ( A < X , ( sizeof ( X ) > 8 ) > * a ) : p ( a ) { }" ,
4986+ tok (code));
4987+ }
49534988 }
49544989
49554990 void template_forward_declared_default_parameter () {
0 commit comments