blob: 8b674910e52280a67b6aa40c2ba33dd2b05b6473 [file] [log] [blame]
// { dg-do compile }
// Origin: Debian GCC maintainers <debian-gcc@lists.debian.org>
// Wolfgang Bangerth <bangerth@dealii.org>
// PR c++/16706: Dependent type calculation during access checking
template <typename> struct B {
B() throw() {}
struct S { };
static int i;
typedef unsigned short int dummy;
};
template <typename _Tp>
struct allocator: B<_Tp> {
template<typename _Tp1> struct rebind
{ typedef allocator<_Tp1> other; };
};
template<typename T, typename>
struct X {
typename allocator<T>::template rebind<int>::other i;
typedef int* dummy;
};
template <class T> class A {
typedef typename X<T,allocator<T> >::dummy dummy;
template <class TP> class XWrapper;
};
template <class T>
template <class TP> struct A<T>::XWrapper<TP *>
{
XWrapper() {}
X<int,allocator<int> > x;
};
template class A<int>::XWrapper<int *>;