$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Daniel Wallin (daniel_at_[hidden])
Date: 2007-01-21 13:30:59
John Maddock wrote:
> Dmitry Ivankov wrote:
>> Doesn't work for void operator*(B&), but can we call such class
>> dereferencable? :)
>
> No, I think there will always be some corner cases like that where it blows
> up, but does anyone really write such an operator in practice?
It's quite possible to handle the case where *x is void. See for example
boost/detail/is_incrementable.hpp. A couple of years ago, I tried to
generalize this into something reusable and more powerful. The result of
that is available in the sandbox; boost/result_check.hpp. The intended
usage was something like:
BOOST_RESULT_CHECK(1, operator*, dereference, *_1)
^ ^ ^ ^
arity ----' | | |
function -' | |
metafunction name -' |
operation -'
template <class T>
struct is_dereferencable
: check_dereference<T>
{};
template <class T>
struct is_dereference_void
: check_dereference<T, boost::is_void<mpl::_> >
{};
template <class T, class U>
struct is_dereference_convertible_to
: check_dereference<T, boost::is_convertible<mpl::_, U> >
{};
-- Daniel Wallin Boost Consulting www.boost-consulting.com