
Hello,
polygon_90_concept is the base most type of polygon. It's corners are restricted to multiples of 90 degrees and its edges are axis-parallel. It is the base most type because it is the most restricted.
That's exactly what I thought while reading Luke's explanation.
You may want to read that article on Wikipedia: http://en.wikipedia.org/wiki/Circle-ellipse_problem
Basically, inheriting an Ellipse from a Circle is always wrong, and inheriting a Circle from an Ellipse is wrong if the Ellipse view of the Circle is mutable.
Wouldn't a typically C++-like approach be to use traits to ask each shape to present itself as an ellipse if it can? ellipse_traits<X>::get_length() and ellipse_traits<X>::get_width() would give the length and width that X has when viewed as an ellipse. ellipse_traits<ellipse> would simply define them as being its length and width. ellipse_traits<circle> would define them as both being its radius. specialization ellipse_traits<rectangle> would not exist, meaning that a rectangle is-not-an ellipse. ellipse and circle would obviously be 2 completely separated classes. Do you think this approach is valid and could be generalized to all geometric shapes? Bruno