From 7e0ff088fcc31d5405df332f6bb333823b872c50 Mon Sep 17 00:00:00 2001 From: jason Date: Tue, 4 Sep 2007 12:27:38 +0000 Subject: [PATCH] PR c++/14032 * pt.c (most_specialized_class): Substitute outer template arguments into the arguments of a member template partial specialization. (strip_innermost_template_args): New fn. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128077 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/testsuite/g++.dg/template/mem-partial1.C | 15 ++++++++++++++ gcc/testsuite/g++.dg/template/mem-partial2.C | 29 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/mem-partial1.C create mode 100644 gcc/testsuite/g++.dg/template/mem-partial2.C diff --git a/gcc/testsuite/g++.dg/template/mem-partial1.C b/gcc/testsuite/g++.dg/template/mem-partial1.C new file mode 100644 index 00000000000..60cb36aea99 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/mem-partial1.C @@ -0,0 +1,15 @@ +// PR c++/14032 + +template struct outer { + template + struct inner { + static int f() { return inner::N; }; + }; + + template + struct inner { + static const int N = 1; + }; +}; + +int i = outer::inner::f(); diff --git a/gcc/testsuite/g++.dg/template/mem-partial2.C b/gcc/testsuite/g++.dg/template/mem-partial2.C new file mode 100644 index 00000000000..fba3255199d --- /dev/null +++ b/gcc/testsuite/g++.dg/template/mem-partial2.C @@ -0,0 +1,29 @@ +// PR c++/14032 +// { dg-do run } + +template +struct outer +{ + template + struct inner // unspecialized compare != compare_with + { + static inline bool test() + { + return false; + } + }; + template // specialization compare == compare_with + struct inner + { + static inline bool test() + { + return true; + } + }; +}; +int main () +{ + bool b = outer::inner::test(); + + return b != true; +} -- 2.11.4.GIT