
Hello,
Unless I missed something, you can use the Boost.TypeTraits's is_same in conjunction with enable_if instead of your SFINAE_is_same_type.
The thing you are missing is the rather unfortunate circumstance I find myself in where two of my primary groups of users refuse to allow any boost dependency in their core libraries. Apparently, boost has a reputation for making the life of the build environment manager a pain.
Integrating Boost inside our build system in my company is absolutely not more a pain than for any other third-party library (I'd even say less than for some of them). And anyway, a good compromise would be at least to accept header-only parts of Boost...
mutable_ellipse_traits is not specialized for circle when ellipse traits is, and is_ellipse_concept would need a complementing is_mutable_ellipse_concept to complete this pattern. We might specialize mutable_circle_traits for elipse because we can write circle data to an ellipse.
Yes indeed, this is the part that was missing to really handle the circle-ellipse problem. The design sounds good to me like that... Bruno