// { 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);
}
