|
Boost : |
Subject: [boost] [type_erasure] compile error with gcc 4.8
From: Christophe Henry (christophe.j.henry_at_[hidden])
Date: 2013-05-22 09:07:04
Hi Steven,
the following code used to compile with older gcc versions (I just tried
with 4.5 and I used the same construct with 4.7) but no more with gcc 4.8,
but I don't know whether it's a gcc or type_erasure problem (or mine).
The problem seems to be with rvalue refs. If I use the commented out
version, it compiles fine on both compilers.
Any idea?
If you have no gcc 4.8, I can attach the error.
Thanks,
Christophe
#include <iostream>
#include <boost/type_erasure/any.hpp>
#include <boost/type_erasure/builtin.hpp>
#include <boost/type_erasure/operators.hpp>
#include <boost/type_erasure/constructible.hpp>
#include <boost/type_erasure/relaxed.hpp>
#include <boost/type_erasure/member.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/function.hpp>
BOOST_TYPE_ERASURE_MEMBER((has_post), post);
struct any_post_concept:
::boost::mpl::vector<
//has_post<void(boost::function<void()>), const
boost::type_erasure::_self>,
has_post<void(boost::function<void()>&&), const
boost::type_erasure::_self>,
boost::type_erasure::relaxed,
boost::type_erasure::copy_constructible<>
>{} ;
typedef boost::type_erasure::any<any_post_concept> any_post;
struct any_impl
{
//void post(boost::function<void()> f)const {f();}
void post(boost::function<void()> && f)const {f();}
};
int main()
{
any_impl s;
any_post p (s);
boost::function<void()> f = [](){std::cout << "ok" << std::endl;};
//p.post(f);
p.post(std::move(f));
return 0;
}
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk