%module cpp11_rvalue_reference3

%warnfilter(SWIGWARN_TYPEMAP_SWIGTYPELEAK);

%inline %{
#include <utility>
struct Thing {};

Thing && global_rvalue_ref = Thing();
Thing *&& global_rvalue_ref_ptr1 = 0;
Thing const*&& global_rvalue_ref_ptr2 = 0;
Thing *const&& global_rvalue_ref_ptr3 = 0;
Thing const*const &&global_rvalue_ref_ptr4 = 0;

Thing && returnit1() { return std::move(global_rvalue_ref); }
Thing *&& returnit2() { return std::move(global_rvalue_ref_ptr1); }
Thing const*&& returnit3() { return std::move(global_rvalue_ref_ptr2); }
Thing *const&& returnit4() { return std::move(global_rvalue_ref_ptr3); }
Thing const*const&& returnit5() { return std::move(global_rvalue_ref_ptr4); }

void takeit1(Thing && t) {}
void takeit2(Thing *&& t) {}
void takeit3(Thing const*&& t) {}
void takeit4(Thing *const&& t) {}
void takeit5(Thing const*const&& t) {}

struct Containing {
  Thing && member_rvalue_ref;
  Thing *&& member_rvalue_ref_ptr1;
  Thing const*&& member_rvalue_ref_ptr2;
  Thing *const&& member_rvalue_ref_ptr3;
  Thing const*const &&member_rvalue_ref_ptr4;

  Containing(Thing&&r, Thing*&& r1, Thing const*&& r2, Thing *const&& r3, Thing const*const && r4) :
    member_rvalue_ref(std::move(r)), 
    member_rvalue_ref_ptr1(std::move(r1)),
    member_rvalue_ref_ptr2(std::move(r2)),
    member_rvalue_ref_ptr3(std::move(r3)),
    member_rvalue_ref_ptr4(std::move(r4))
    {}
};
%}


%inline %{
int && int_global_rvalue_ref = 5;
int *&& int_global_rvalue_ref_ptr1 = 0;
int const*&& int_global_rvalue_ref_ptr2 = 0;
int *const&& int_global_rvalue_ref_ptr3 = 0;
int const*const &&int_global_rvalue_ref_ptr4 = 0;

int && int_returnit1() { return std::move(int_global_rvalue_ref); }
int *&& int_returnit2() { return std::move(int_global_rvalue_ref_ptr1); }
int const*&& int_returnit3() { return std::move(int_global_rvalue_ref_ptr2); }
int *const&& int_returnit4() { return std::move(int_global_rvalue_ref_ptr3); }
int const*const&& int_returnit5() { return std::move(int_global_rvalue_ref_ptr4); }

void int_takeit1(int && t) {}
void int_takeit2(int *&& t) {}
void int_takeit3(int const*&& t) {}
void int_takeit4(int *const&& t) {}
void int_takeit5(int const*const&& t) {}

struct IntContaining {
  int && member_rvalue_ref;
  int *&& member_rvalue_ref_ptr1;
  int const*&& member_rvalue_ref_ptr2;
  int *const&& member_rvalue_ref_ptr3;
  int const*const &&member_rvalue_ref_ptr4;

  IntContaining(int&& r, int*&& r1, int const*&& r2, int *const&& r3, int const*const && r4) :
    member_rvalue_ref(std::move(r)),
    member_rvalue_ref_ptr1(std::move(r1)),
    member_rvalue_ref_ptr2(std::move(r2)),
    member_rvalue_ref_ptr3(std::move(r3)),
    member_rvalue_ref_ptr4(std::move(r4))
    {}
};
%}
