| re: Variable declaration taken as a function pointer declaration
Bolin wrote:[color=blue]
> When compiling the following code:
>
> [code]
> #include <iostream>
>
> struct B {};
>
> struct A
> {
> A(B b1, B b2) {};[/color]
.. ^^^
Trailing semicolon is extraneous here.
[color=blue]
> void foo() { std::cout << "foo called" << std::endl; }
> };
>
> int main(int argc, char * argv[])
> {
> A a(B(), B());
> a.foo();
> return 0;
> }
> [\code]
>
> the compiler will interprete the first line of the main function as a
> function pointer declaration, and thus will fail at the next line. Does
> somebody know why this is so, and if there is an elegant way to solve
> this problem that does not involve temporary variables?[/color]
It is so because the language designers had to make a decision and they
picked the "If it looks like a declaration, it is a declaration" solution.
You can work around it by adding an extra set of parentheses around the
arguments:
A a((B()), (B()));
V |