mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 10:40:57 +08:00
re PR c++/14032 (Specialization of inner template using outer template argument doesn't work)
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. From-SVN: r128077
This commit is contained in:
parent
dc28490d05
commit
d950f2be37
15
gcc/testsuite/g++.dg/template/mem-partial1.C
Normal file
15
gcc/testsuite/g++.dg/template/mem-partial1.C
Normal file
@ -0,0 +1,15 @@
|
||||
// PR c++/14032
|
||||
|
||||
template <typename T> struct outer {
|
||||
template <typename T2, typename U>
|
||||
struct inner {
|
||||
static int f() { return inner<T,int>::N; };
|
||||
};
|
||||
|
||||
template <typename U>
|
||||
struct inner<T,U> {
|
||||
static const int N = 1;
|
||||
};
|
||||
};
|
||||
|
||||
int i = outer<int>::inner<double,int>::f();
|
29
gcc/testsuite/g++.dg/template/mem-partial2.C
Normal file
29
gcc/testsuite/g++.dg/template/mem-partial2.C
Normal file
@ -0,0 +1,29 @@
|
||||
// PR c++/14032
|
||||
// { dg-do run }
|
||||
|
||||
template <bool compare>
|
||||
struct outer
|
||||
{
|
||||
template <bool compare_with,bool second>
|
||||
struct inner // unspecialized compare != compare_with
|
||||
{
|
||||
static inline bool test()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
template <bool second> // specialization compare == compare_with
|
||||
struct inner<compare,second>
|
||||
{
|
||||
static inline bool test()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
};
|
||||
int main ()
|
||||
{
|
||||
bool b = outer<true>::inner<true,false>::test();
|
||||
|
||||
return b != true;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user