// PR c++/66647 // { dg-do compile { target c++11 } } template struct A { static constexpr _Tp value = 1; }; template class B { public: template struct rebind { }; }; template class C { template static A _S_chk (typename _Alloc2::template rebind<_Tp2> *); public: using __type = decltype (_S_chk<_Alloc, _Tp> (0)); }; template ::__type::value> struct D; template struct D<_Alloc, _Tp, 1> { typedef typename _Alloc::template rebind<_Tp> __type; }; template struct F { template using rebind_alloc = typename D<_Alloc, _Tp>::__type; }; template struct __alloc_traits { template struct rebind { typedef typename F<_Alloc>::template rebind_alloc other; }; }; template struct G { typename __alloc_traits<_Alloc>::template rebind::other _Tp_alloc_type; }; template > class vector : G<_Alloc> { }; template using tfuncptr = void(); template struct H { vector > funcs; };