template <size_t N> void shape_kind<N>::accept(ShapeVisitor& v) const { v.visit(*this); }
void Shape_Null::accept( ShapeVisitor& visitor ) { visitor.visit( *this ); }
void Shape_Composite::accept ( ShapeVisitor & visitor ) { visitor.visit (*this); }
void accept(ShapeVisitor& v) { v.visit(*this); }
void Shape_Sphere::accept ( ShapeVisitor & visitor ) { visitor.visit (*this); }
void Shape_CylinderSurface::accept(ShapeVisitor &visitor) { visitor.visit(*this); }
void Shape_Intersection::accept ( ShapeVisitor & visitor ) { visitor.visit (*this); }
inline void Rectangle::accept(ShapeVisitor& v) { v.visitRectangle(this); }
void Triangle::accept(ShapeVisitor& v) { v.visitTriangle(this); }
inline void VisitableCircleShape::accept(ShapeVisitor& v){ v.visit(*this); }
inline void VisitableConvexShape::accept(ShapeVisitor& v){ v.visit(*this); }
inline void VisitableRectangleShape::accept(ShapeVisitor& v){ v.visit(*this); }
void NameDecorator::Accept(ShapeVisitor& v) {// Accept a visitor v.Visit(*this); }