// PR c++/61539 // { dg-do compile { target c++11 } } template class A; template class B; template class C; template <> class C { virtual void xparse (int &, const B > &) const; }; template class G : C { public: G (void *) {} void default_value (const T &); void xparse (int &, const B > &) const; }; template void validate (int &, const B > &, T *, int); template void G::xparse (int &p1, const B > &p2) const { validate (p1, p2, (T *)0, 0); } template G *value (T *) { return new G(0); } namespace Eigen { template struct D; template class F; template struct D > { typedef _Scalar Scalar; }; template class F { public: typedef typename Eigen::D::Scalar Scalar; F (const Scalar &, const Scalar &, const Scalar &); }; template void validate (int &, const B > &, Eigen::F *); } int main (int, char *[]) { Eigen::F a (0, 0, 0); value (&a)->default_value (Eigen::F(0, 0, 0)); }