#include <utility>
struct foo
{
foo() {}
foo(foo&&) {}
// add this to get compliant behavior:
/* foo(const foo&); */
};
void test(foo) {}
int main()
{
foo f;
// should work:
test(std::move(f));
// should not work:
test(f); // but MSVC2010 and GCC 4.5 accept (fixed in GCC 4.6)
}
I2luY2x1ZGUgPHV0aWxpdHk+CgpzdHJ1Y3QgZm9vCnsKICAgIGZvbygpIHt9CiAgICBmb28oZm9vJiYpIHt9CgogICAgLy8gYWRkIHRoaXMgdG8gZ2V0IGNvbXBsaWFudCBiZWhhdmlvcjoKICAgIC8qIGZvbyhjb25zdCBmb28mKTsgKi8KfTsKCnZvaWQgdGVzdChmb28pIHt9CgppbnQgbWFpbigpCnsKICAgIGZvbyBmOwoKICAgIC8vIHNob3VsZCB3b3JrOgogICAgdGVzdChzdGQ6Om1vdmUoZikpOwoKICAgIC8vIHNob3VsZCBub3Qgd29yazoKICAgIHRlc3QoZik7IC8vIGJ1dCBNU1ZDMjAxMCBhbmQgR0NDIDQuNSBhY2NlcHQgKGZpeGVkIGluIEdDQyA0LjYpCn0K