Boost logo

Boost :

Subject: Re: [boost] [result_of] fails with clan (C++11)
From: Oliver Kowalke (oliver.kowalke_at_[hidden])
Date: 2012-11-28 02:42:58


> > Hello,
> > clang (c++11 support) fails on code like:
> >
> > BOOST_STATIC_ASSERT((
> > is_same< void, typename result_of< Fn() >::type >::value));
> >
> > with error:
> >
> > no type named 'type' in 'boost::result_of<void (&())(X &)>'
> > is_same< void, typename result_of< Fn() >::type >::value));
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~**~~
> >
>
> Does Fn == void (&)(X&) or void (X&) ? I.e., is it a unary function type?

it's called inside a templated function:
template< typename Fn >
void g(BOOST_RV_RV( Fn) fn){
BOOST_STATIC_ASSERT(...)
....}

in the example it was instantiated with a function pointer void(*)(X&)

> There might've been a recent change only for Clang to allow result_of to
be
> better usable with SFINAE: result_of< F ( Args... ) > doesn't have a
nested
> type typedef if F ( Args... ) is ill-formed (which appears to be the case
> here).

it's strange because clang(version unknown) fails only on MacOSX - on Linux
clang (3.2) compiles the same code

regards,
Oliver

> ../boost/static_assert.hpp:48:**50: note: expanded from macro
> > 'BOOST_STATIC_ASSERT'
> > # define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
> > ^
> >
> >
> > Do you know why it fails? (other compilers like gcc, intel, msvc compile
> > the code)
> >
>
> - Jeff
>
> _______________________________________________
> Unsubscribe & other changes:
http://lists.boost.org/mailman/listinfo.cgi/boost


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk