
On Nov 19, 2007 6:12 PM, Stjepan Rajko <stipe@asu.edu> wrote:
// ---- A PARTIAL SOLUTION
template <typename T2, typename Enable=void> class enabled_class { BOOST_MPL_ASSERT((is_same<Enable, void>));
// default implementation };
// we forget to change the user code enabled_class<X, Y> o; // ERROR (except in the unfortunate case when Y is void)
Actually, looks like the void case can be handled as well: namespace detail { struct enable_guard; } template <typename T2, typename Enable=detail::enable_guard> class enabled_class { // Error: Enable has non-default parameter value BOOST_MPL_ASSERT((is_same<Enable, detail::enable_guard>)); // base template implementation... }; template<typename T> class enabled_class< T, typename enable_if< some_condition<T>, detail::enable_guard
::type > { // partial specialization implementation... };
// we forget to change the user code enabled_class<X, Y> o; // ERROR (even if Y is void) Stjepan