Hi Samuel,

The parameters to pass to not_implemented are basically free, it's anything you want to see appear in the compile error message it triggers. Concretely algorithms, pass the tags of the geometries they are called with.

I had thought about your issue. I hadn't had the time to give it much thought yet but the first thing I'd try would be to return an instance of some not_implemented_result which would be implicitly convertible to anything.

struct not_implemented_result
{
    template <class T>
    operator T()
    {
        // This will never actually happen - we just need to write something
        // that hopefully all compilers are happy with (ideally without warnings)
        // and doesn't assume anything about T
        T* t;
        return *T;
    }
};

template <...>
struct not_implemented: ...
{
    template <class Arg1>
    static not_implemented_result apply(Arg1)
    { throw .... }

    // overloads with more arguments - as we don't have c++11 variadics available
};

The implicit conversion ensures the compiler will always accept to compile the call, thus giving a chance for the exception to occur at runtime. I'm not saying it will work, but that would be my first attempt...

Regards
Bruno