Consider the following program:
#include
struct A {};
int main(int argc, char** argv) {
A a(std::fstream(argv[1]));
}
The parens are superfluous. All of the following are the declarations:
T a;
T (a);
T ((a));
T (((a))));
so are these:
T a[1];
T (a[1]);
T ((a[1]));
T (((a[1]))));
So is this:
A a(std::fstream(argv[1]));
which is same as:
A a(std::fstream argv[1]);
which is same as:
A a(std::fstream *argv);
Hope that helps.