template<typename T, unsigned D>
class SurfacePoint;
+/**
+Base class and interface for geometric shapes. Shapes may be bounded or
+unbounded. They are always considered to be solid, i.e. have a distinct inside
+and an outside.
+*/
template<typename T, unsigned D>
class Shape
{