In C++ it's possible to declare variable inside parentheses like int (x) = 0;
. But it seems that if you use this
instead of variable name, then constructor is used instead: A (this);
calls A::A()
. So the first question is why it's different for this
, is it because variables can't be named this
? And to complicate matters a bit lets put this
inside a lambda -
struct B;
struct A
{
A (B *) {}
};
struct B
{
B ()
{
[this] { A (this); } ();
}
};
Now gcc calls A::A()
, msvc prints error about missing default constructor and clang prints expected expression
(http://ift.tt/2lc7LXg). It's even funnier in msvc - it really creates variable with name this
that you can use, so it's definitely a bug (http://ift.tt/2lWmfHP). Which compiler is right and what are the reasons for such behavior?
Aucun commentaire:
Enregistrer un commentaire