
on Mon Oct 01 2007, "chun ping wang" <cablepuff-AT-gmail.com> wrote:
hmm that is what i want for now... (i might change it later). I want to know to keept it in back of my head. Thanks.
On 10/1/07, David Abrahams < dave@boost-consulting.com> wrote:
on Wed Sep 26 2007, "chun ping wang" < cablepuff-AT-gmail.com> wrote:
> what i want to do is if type "T" happens to be a integeral type or a class type that inherits > from boost::operators than let the function compile otherwise a > compile time error appears.
I could tell you how, but it seems ill-advised. I really doubt you want to fail compilation if someone passes you a class type that acts just like int, but that isn't written using boost::operators. Are you sure that's what you want?
// untested template <class T, class U> char (& is_op_test(operators<T,U> const&) )[2] template <class T> char is_op_test(T const&); template<class T> T const& make(); template <class T> struct is_operators : mpl::bool_<(sizeof(is_op_test(make<T>())) == 2)> {}; template <class T> typename enable_if<mpl::or_<boost::is_integral<T>, is_operators<T> >, return_type>::type f(T x) { ... } -- Dave Abrahams Boost Consulting http://www.boost-consulting.com