$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [result_of] fails with clan (C++11)
From: Oliver Kowalke (oliver.kowalke_at_[hidden])
Date: 2012-11-28 16:25:56
2012/11/28 Oliver Kowalke <oliver.kowalke_at_[hidden]>
>
> > You are asking result_of to compute the result of calling a unary
> > function that takes an X& with zero arguments. That's nonsensical. If
> > you intend to call it with an X&, then ask it what the result is when
> > called with an X&:
> >
> > boost::result_of< Fn(X&) >::type
> >
> > This should correctly report void regardless of whether result_of uses
> > decltype or the TR1 result_of protocol.
>
> OK, I got it.
> It's strange that clang 3.2 (c++11), gcc, ontel and msvc compile the code
> without errors on Loinux and Windows.
>
I thought I could the problem can be solved like the following code, but
it does not compile for gcc (c++0x):
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
template< typename Fn >
void g( BOOST_RV_REF( Fn) ) {
typedef typename remove_reference< Fn >::type Y;
BOOST_STATIC_ASSERT((
is_same< void, typename result_of< Y( X &) >::type >::value));
}
#else
...
#endif
g() should be callable with function pointers, copyable and moveable-only
functors (signatue void( X&)).
Again - the original code works for gcc, intel, msvc and clang (Linux) and
fails for clang on MacOS X.