Ian McCulloch
David Abrahams wrote:
Ian McCulloch
writes: * Coupling; you need to include a primary template.
Ok, but what does that primary template do? Surely nothing, or some very conservative default.
Actually you don't need to include a primary template. All you need is a declaration with no body. You can do that without even pulling in a header.
I think, an empty body is better than a bare declaration. At least, with
template <typename T> struct my_algo_impl {};
you can do SFINAE on whether my_algo_impl<T> is actually defined or not, for some T (ie. using T::result_type, or probably better boost::result_of).
That's a useful technique, but I don't see how it relates to coupling. In order for a user to provide a specialization of some library template for her type, she need only provide the bare declaration. Bare declarations and empty definitions aren't alternatives, they're apples and oranges. -- Dave Abrahams Boost Consulting www.boost-consulting.com