#include<iostream>
struct A {
A (int i = 0) { std::cout << "A::A()\n"; }
};
int i = 0;
int* const p = &i;
int main () {
A(); // calls `A::A(int=0)`
A(i); // calls `A::A(int=0)`
A(*p); // <--- (1) same as local `A *p;`
{
A((*p)); // <--- (2) same as local `A *p;`
}
A (*foo()); // <--- (3) ??
{
A ((*foo())); // <--- (4) ??
}
}
I2luY2x1ZGU8aW9zdHJlYW0+CgpzdHJ1Y3QgQSB7IAogIEEgKGludCBpID0gMCkgeyBzdGQ6OmNvdXQgPDwgIkE6OkEoKVxuIjsgfQp9OwoKaW50IGkgPSAwOwppbnQqIGNvbnN0IHAgPSAmaTsgCgppbnQgbWFpbiAoKSB7CiAgICAgIEEoKTsgLy8gY2FsbHMgYEE6OkEoaW50PTApYAogICAgICBBKGkpOyAgLy8gY2FsbHMgYEE6OkEoaW50PTApYAoKICAgICAgQSgqcCk7IC8vIDwtLS0gKDEpIHNhbWUgYXMgbG9jYWwgYEEgKnA7YAogICAgICB7CiAgICAgICAgQSgoKnApKTsgICAvLyA8LS0tICgyKSBzYW1lIGFzIGxvY2FsIGBBICpwO2AKICAgICAgfQogICAgICBBICgqZm9vKCkpOyAgLy8gPC0tLSAoMykgPz8KICAgICAgewogICAgICAgIEEgKCgqZm9vKCkpKTsgIC8vIDwtLS0gKDQpID8/CiAgICAgIH0KfQ==