Boost logo

Boost Users :

From: chun ping wang (cablepuff_at_[hidden])
Date: 2007-10-03 15:30:50


hmm doesn't work.
g++.exe -Wall -D__DEBUG__ -c ./cs512/c++/cppdef/BitOperation.cpp -o
./lib/BitOp
eration.o -I"C:/Boost/include" -I"./bigint/c++" -fexceptions
-fverbose-asm -f
expensive-optimizations -O3 -pg -g3
./cs512/c++/cppdef/../MyOperators.hpp:22: error: expected initializer before
'te
mplate'
./cs512/c++/cppdef/BitOperation.cpp:44: error: 'return_type' was not
declared in
 this scope
./cs512/c++/cppdef/BitOperation.cpp:44: error: template argument 2 is
invalid
./cs512/c++/cppdef/BitOperation.cpp:45: error: expected initializer before
'Log2
'
./cs512/c++/cppdef/BitOperation.cpp:151: error: 'return_type' was not
declared i
n this scope
./cs512/c++/cppdef/BitOperation.cpp:151: error: template argument 2 is
invalid
./cs512/c++/cppdef/BitOperation.cpp:152: error: expected initializer before
'boo
st'

heres the code ..
typename boost::enable_if<boost::mpl::or_<boost::is_arithmetic<T>,
boost::is_operators<T> >, return_type>::type // BitOperation.cpp line 44.

namespace boost
{
        // line 18 of MyOperators.hpp
        template <class T, class U>
        char (& is_op_test(boost::operators<T,U> const&) )[2]

        template <class T>
        char is_op_test(T const&);
        // line 24 of MyOperators.hpp
}

I pass T as an int which should pass the first test.

On 10/1/07, David Abrahams <dave_at_[hidden]> wrote:
>
>
> 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_at_[hidden]> 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
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net