// { dg-do assemble } template<class CoordinateSystem, class MeshTag> struct Mesh { }; struct RectGrid { }; struct RectMesh { }; struct Cartesian { }; template<class CS> struct Mesh<CS, RectGrid> { }; template<class CS> struct Mesh<CS, RectMesh> : public Mesh<CS, RectGrid> { }; template<class CS> void foo(const Mesh<CS, RectGrid> &) { } int main() { Mesh<Cartesian, RectMesh> m; foo(m); }