Re: composition of declarators
"Victor Bazarov" <v.Abazarov@comAcast.net> wrote in message
news:FcOdnS1xnNYD7rDbnZ2dnUVZ_g-dnZ2d@comcast.com...
ssailor wrote:
I saw an exaple in the c++ standard(clause 6.8),
-------------------------------------------------------
struct T1 {
T1 operator ()( int x ) { return T1(x ); }
int operator =( int x ) { return x; }
T1(int ) { }
};
struct T2 { T2(int ){ } };
int a , (*(* b)( T2 ))( int ), c , d;
void ff ()
{
T1(a) = 3 ,
(*(* b)( T2(c )))( int(d )); // AA
}
--------------------------------------------
I am confused that the declaration at the line AA is valid.
It is.
Then, what's the meaning of this declaration? Thank in advance.
The second part of the declaration declares 'b' to be a pointer
to a function that takes one argument of type 'int' and returns
a pointer to a function that takes one argument of type T2 and
returns T1.
Actually, it is the other way around: it is a function pointer taking a T2
and returning a pointer to a function taking an int and returning a T1.
The funny thing is, if you replace the comma on the previous line with a
semi-colon, it actually becomes a double function call: first on the
function pointed to by the earlier defined 'b', passing a T2 constructed out
of c, and another function call on the function returned by b(), passing an
int constructed out of d)
- Sylvester Hesp