/* { dg-do compile } */ /* { dg-options "-O -fwhole-program -fipa-cp" } */ typedef float scoord_t; typedef scoord_t sdist_t; typedef sdist_t dist_t; template class TRay { }; typedef TRay Ray; class BBox { }; class RenderContext { }; class RefCounted { public: void deref () const { if (--ref_count <= 0) { delete this; } } mutable int ref_count; }; template class Ref { public: ~Ref () { if (obj) obj->deref (); } T *obj; }; class Material : public RefCounted { }; class Surface { public: virtual ~Surface () { } class IsecInfo { }; virtual const IsecInfo *intersect (Ray &ray, RenderContext &context) const; Ref material; }; class LocalSurface : public Surface { virtual BBox bbox () const; }; BBox LocalSurface::bbox () const { }