// expected-note@+3 {{type declared here [loplugin:moveit]}} // expected-note@+2 {{type declared here [loplugin:moveit]}} // expected-note@+1 {{type declared here [loplugin:moveit]}} struct Movable
{
std::shared_ptr<int> x;
void method1();
Movable();
Movable(int);
};
namespace test1a
{ struct F
{ // expected-note@+1 {{passing to this param [loplugin:moveit]}} void call_by_value(Movable); void foo()
{ // expected-note@+1 {{local var declared here [loplugin:moveit]}}
Movable m; // expected-error@+1 {{can std::move this var into this param [loplugin:moveit]}}
call_by_value(m);
}
};
}
namespace test1b
{ struct F
{ // expected-note@+1 {{passing to this param [loplugin:moveit]}}
F(Movable); void foo()
{ // expected-note@+1 {{local var declared here [loplugin:moveit]}}
Movable m; // expected-error@+1 {{can std::move this var into this param [loplugin:moveit]}}
F a(m);
(void)a;
}
};
}
namespace test2
{ struct F
{ // expected-note@+1 {{passing to this param [loplugin:moveit]}}
F(Movable); void foo()
{ // expected-note@+1 {{local var declared here [loplugin:moveit]}}
Movable m; // expected-error@+1 {{can std::move this var into this param [loplugin:moveit]}}
F a(m);
(void)a;
}
};
}
// No error expected, because referencing after call namespace test3
{ struct F
{
F(Movable); void foo()
{
Movable m;
F a(m);
m.method1();
}
};
}
// No error expected, because constructing temporary(i.e. rvalue) to pass to param namespace test4
{ struct F
{
F(Movable); void foo()
{
F a((Movable(5)));
(void)a;
}
};
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.