|
Boost : |
From: Russell Hind (rh_gmane_at_[hidden])
Date: 2005-03-10 12:03:28
Eric Niebler wrote:
>
> I'm afraid you're out of luck, for now. Without access to this compiler,
> or knowledge of it's quirks, there's nothing I can do. I'll gladly
> accept a patch if you can make it work. The first thing I would try if I
> were you would be to change the line:
>
> typedef mpl::bool_<value> type;
>
> to
>
> typedef mpl::bool_<is_range_base<T>::value> type;
>
> That's all I can think of right now.
>
Well we're getting somewhere. That has made foreach.hpp compile. I
have to #define BOOST_FOREACH_NO_CONST_RVALUE_DETECTION and a couple of
examples I've tried now work.
I haven't tried the tests (not sure how to run them easily) but this
simple example compiles and runs (albeit with a load of compiler
warnings about passing temporaries in to functions)
BOOST_FOREACH( char ch, "Hello!" )
{
std::cout << ch;
}
std::cout << std::endl;
std::vector<int> v;
BOOST_FOREACH(int& i, v)
{
i *= 2;
std::cout << i << std::endl;
}
The compiler warnings are listed below. You can disable warnings
temporarily on borland by
#ifdef __BORLANDC__
# pragma option push -w-8032
#endif
before the call and
#ifdef __BORLANDC__
# pragma option pop
#endif
After the call. Don't know if you want to mess around with you code to
do this or not.
If i get the tests running, I'll report back with the details.
Cheers
Russell
[C++] main.cpp(1):
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::mpl::false_ is_rvalue<char *>(char *
&,int)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::mpl::false_ is_rvalue<char *>(char *
&,int)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::mpl::false_ is_rvalue<char *>(char *
&,int)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
[C++ Warning] main.cpp(14): W8032 Temporary used for parameter 1 in call
to 'boost::foreach_detail_::boost::foreach_detail_::type2type<char
*,boost::mpl::false_> * encode_type<char *>(char * &)'
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk