1. Testing if not_implemented_tag is a base class of the dispatcher is
not (yet) reliable. For simple algorithms like distance it works but for
algorithms that depend on others it won't. Concrete example : intersects
calls extreme_points. extreme_points is not implemented for anything
else than rings, polygons and boxes. Yet this limitation is not
"reported" to the intersects dispatcher.
2. The dispatcher is an implementation detail (not a public interface)
so should we rely on it ?
3. The filtering should happend after the variant resolution that means
rewriting all the variant code in the runtime extension. Unless a hook
is implemented to augment this code with "runtime filtering".
4. Maybe an extension is not a good idea and runtime support should be a
core functionality of the library. I think so because it seems to
require an extra requirements : the algorithms must report compile time
errors in a specified way when invoked with not supported types not just
rise an MPL assertion.