
Giovanni Piero Deretta wrote:
Wow! Does this really work? You can really apply SFINAE to conversion opreators by (ab)using the exception specification? Is this only a gcc thing or is it "by the standard"?
It works on GCC and solves the particular problem, I don't know much about other compilers and "by the standard". It has to be checked if we want to use it in other cases.
If the latter, boost::enable_if documents might need to be updated :)
Yes, may be some extensions to the boost::enable_if library: namespace boost { namespace detail { class never_throw { }; } } #define BOOST_ENABLE_IF(...) throw (typename ::boost::enable_if< __VA_ARGS__, ::boost::detail::never_throw>::type) And using: template <class T> T foo(T t) BOOST_ENABLE_IF(boost::is_arithmetic<T>) { ... } etc.