the error was a missing semicolon after declaration of the array.

typename boost::enable_if<boost::mpl::or_<boost::is_arithmetic<T>, boost::is_operators<T> >, return_type>::type // line 44.

./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
'

On 10/3/07, chun ping wang <cablepuff@gmail.com> wrote:
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@boost-consulting.com> 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@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

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users