@@ -211,6 +211,7 @@ class TestSimplifyTemplate : public TestFixture {
211211 TEST_CASE (template166); // #10081 hang
212212 TEST_CASE (template167);
213213 TEST_CASE (template168);
214+ TEST_CASE (template169);
214215 TEST_CASE (template_specialization_1); // #7868 - template specialization template <typename T> struct S<C<T>> {..};
215216 TEST_CASE (template_specialization_2); // #7868 - template specialization template <typename T> struct S<C<T>> {..};
216217 TEST_CASE (template_enum); // #6299 Syntax error in complex enum declaration (including template)
@@ -4264,6 +4265,102 @@ class TestSimplifyTemplate : public TestFixture {
42644265 ASSERT_EQUALS (exp, tok (code));
42654266 }
42664267
4268+ void template169 () {
4269+ const char code[] = " template < typename T> struct last { T t; };\n "
4270+ " template < typename T > struct CImgList { T t; };\n "
4271+ " CImgList < last < bool > > c1;\n "
4272+ " CImgList < last < signed char > > c2;\n "
4273+ " CImgList < last < unsigned char > > c3;\n "
4274+ " CImgList < last < char > > c4;\n "
4275+ " CImgList < last < unsigned short > > c5;\n "
4276+ " CImgList < last < short > > c6;\n "
4277+ " CImgList < last < unsigned int > > c7;\n "
4278+ " CImgList < last < int > > c8;\n "
4279+ " CImgList < last < unsigned long > > c9;\n "
4280+ " CImgList < last < long > > c10;\n "
4281+ " CImgList < last < unsigned long long > > c11;\n "
4282+ " CImgList < last < long long > > c12;\n "
4283+ " CImgList < last < float > > c13;\n "
4284+ " CImgList < last < double > > c14;\n "
4285+ " CImgList < last < long double > > c15;" ;
4286+ const char exp[] = " struct last<bool> ; "
4287+ " struct last<signedchar> ; "
4288+ " struct last<unsignedchar> ; "
4289+ " struct last<char> ; "
4290+ " struct last<unsignedshort> ; "
4291+ " struct last<short> ; "
4292+ " struct last<unsignedint> ; "
4293+ " struct last<int> ; "
4294+ " struct last<unsignedlong> ; "
4295+ " struct last<long> ; "
4296+ " struct last<unsignedlonglong> ; "
4297+ " struct last<longlong> ; "
4298+ " struct last<float> ; "
4299+ " struct last<double> ; "
4300+ " struct last<longdouble> ; "
4301+ " struct CImgList<last<bool>> ; "
4302+ " struct CImgList<last<signedchar>> ; "
4303+ " struct CImgList<last<unsignedchar>> ; "
4304+ " struct CImgList<last<char>> ; "
4305+ " struct CImgList<last<unsignedshort>> ; "
4306+ " struct CImgList<last<short>> ; "
4307+ " struct CImgList<last<unsignedint>> ; "
4308+ " struct CImgList<last<int>> ; "
4309+ " struct CImgList<last<unsignedlong>> ; "
4310+ " struct CImgList<last<long>> ; "
4311+ " struct CImgList<last<unsignedlonglong>> ; "
4312+ " struct CImgList<last<longlong>> ; "
4313+ " struct CImgList<last<float>> ; "
4314+ " struct CImgList<last<double>> ; "
4315+ " struct CImgList<last<longdouble>> ; "
4316+ " CImgList<last<bool>> c1 ; "
4317+ " CImgList<last<signedchar>> c2 ; "
4318+ " CImgList<last<unsignedchar>> c3 ; "
4319+ " CImgList<last<char>> c4 ; "
4320+ " CImgList<last<unsignedshort>> c5 ; "
4321+ " CImgList<last<short>> c6 ; "
4322+ " CImgList<last<unsignedint>> c7 ; "
4323+ " CImgList<last<int>> c8 ; "
4324+ " CImgList<last<unsignedlong>> c9 ; "
4325+ " CImgList<last<long>> c10 ; "
4326+ " CImgList<last<unsignedlonglong>> c11 ; "
4327+ " CImgList<last<longlong>> c12 ; "
4328+ " CImgList<last<float>> c13 ; "
4329+ " CImgList<last<double>> c14 ; "
4330+ " CImgList<last<longdouble>> c15 ; "
4331+ " struct CImgList<last<bool>> { last<bool> t ; } ; "
4332+ " struct CImgList<last<signedchar>> { last<signedchar> t ; } ; "
4333+ " struct CImgList<last<unsignedchar>> { last<unsignedchar> t ; } ; "
4334+ " struct CImgList<last<char>> { last<char> t ; } ; "
4335+ " struct CImgList<last<unsignedshort>> { last<unsignedshort> t ; } ; "
4336+ " struct CImgList<last<short>> { last<short> t ; } ; "
4337+ " struct CImgList<last<unsignedint>> { last<unsignedint> t ; } ; "
4338+ " struct CImgList<last<int>> { last<int> t ; } ; "
4339+ " struct CImgList<last<unsignedlong>> { last<unsignedlong> t ; } ; "
4340+ " struct CImgList<last<long>> { last<long> t ; } ; "
4341+ " struct CImgList<last<unsignedlonglong>> { last<unsignedlonglong> t ; } ; "
4342+ " struct CImgList<last<longlong>> { last<longlong> t ; } ; "
4343+ " struct CImgList<last<float>> { last<float> t ; } ; "
4344+ " struct CImgList<last<double>> { last<double> t ; } ; "
4345+ " struct CImgList<last<longdouble>> { last<longdouble> t ; } ; "
4346+ " struct last<bool> { bool t ; } ; "
4347+ " struct last<signedchar> { signed char t ; } ; "
4348+ " struct last<unsignedchar> { unsigned char t ; } ; "
4349+ " struct last<char> { char t ; } ; "
4350+ " struct last<unsignedshort> { unsigned short t ; } ; "
4351+ " struct last<short> { short t ; } ; "
4352+ " struct last<unsignedint> { unsigned int t ; } ; "
4353+ " struct last<int> { int t ; } ; "
4354+ " struct last<unsignedlong> { unsigned long t ; } ; "
4355+ " struct last<long> { long t ; } ; "
4356+ " struct last<unsignedlonglong> { unsigned long long t ; } ; "
4357+ " struct last<longlong> { long long t ; } ; "
4358+ " struct last<float> { float t ; } ; "
4359+ " struct last<double> { double t ; } ; "
4360+ " struct last<longdouble> { long double t ; } ;" ;
4361+ ASSERT_EQUALS (exp, tok (code));
4362+ }
4363+
42674364 void template_specialization_1 () { // #7868 - template specialization template <typename T> struct S<C<T>> {..};
42684365 const char code[] = " template <typename T> struct C {};\n "
42694366 " template <typename T> struct S {a};\n "
0 commit comments