#include <boost/config.hpp>
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
int main()
{
return 0;
}
#else
#include <boost/move/core.hpp>
#include <iostream>
class sink_tester
{
public: operator ::boost::rv<sink_tester>&()
{ return *static_cast< ::boost::rv<sink_tester>* >(this); }
operator const ::boost::rv<sink_tester>&() const
{ return *static_cast<const ::boost::rv<sink_tester>* >(this); }
};
sink_tester rvalue() { return sink_tester(); }
const sink_tester const_rvalue() { return sink_tester(); }
sink_tester & lvalue() { static sink_tester lv; return lv; }
const sink_tester & const_lvalue() { static const sink_tester clv = sink_tester(); return clv; }
void sink(::boost::rv<sink_tester> &) { std::cout << "non-const rvalue catched" << std::endl; }
void sink(const ::boost::rv<sink_tester> &){ std::cout << "const (r-l)value catched" << std::endl; }
void sink(sink_tester &) { std::cout << "non-const lvalue catched" << std::endl; }
int main()
{
sink(const_rvalue()); sink(const_lvalue()); sink(lvalue()); sink(rvalue()); return 0;
}
#endif