Markus Werle <[EMAIL PROTECTED]> writes: >> Dear Boosters, >> >> The enable_if library defines the enable_if and disable_if templates, >> which are tools for controlling which function templates are included >> in the overload resolution set based on the properties of the argument >> types. >> >> The following example demonstrates their use: >> >> template <class T> >> typename enable_if<boost::is_arithmetic<T>::value, void>::type foo(T t) { >> std::cout << "An arithmetic type\n"; >> } >> >> template <class T> >> typename disable_if<boost::is_arithmetic<T>::value, void>::type foo(T t) { >> std::cout << "Not an arithmetic type\n"; >> } > > Wow! C++ always has a solution for its own problems: > I always wondered how I could prevent Daixtrose template operators > get applied to other user's or builtin types and decided to put > > template <class T1, class T2> > SomeComplicatedType operator+(T1 const &, T2 const &) > > et. al. into their own namespace DefaultOps. > > As of today Daixtrose users are explicitly forced to say > using namespace Daixt::DefaultOps if they want their code to compile. > And still may run into disambiguities when they include other beasts > of that kind. This is annoying.
Yes, I've been meaning to apply the same fix to Boost.Python's "self" operators ever since I learned about enable_if last fall. Unfortunately, not all compilers support it so the special namespace is still needed, but at least we can make things work perfectly on some compilers. -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost