Fei Liu wrote:
Quote:
[..]
int foo(int A, int * pA){ return 0; }
int main(){
typedef int * pi;
typedef int ii;
int a = sizeof(foo(ii(), pi()));
}
>
>
I understand the function foo never actually gets called, but what
causes the compiler to ignore this usage (without any actual storage
unit or variable declaration)?
5.3.3/1 Sizeof
"... The operand is either an expression *which is not evaluated* ..."
(emphasis mine).
Quote:
Normally one cannot call a function
like this.
Not sure what you meant by "normally". And how is it "like this"?
Temporaries of type 'ii' and 'pi' are constructed and passed to the
function. Just remove 'sizeof' and see what happens.
Quote:
Also I didn't find any reference that sizeof can be used
to take the size of a function return type during compile time.
Again, 5.3.3/1. What of "an expression" do you not get?
Quote:
I
know what this code is doing and it makes sense to me. But it seems
like I can't find any reference that says this is correct and proper
use of C++ syntax.
This is the first time this kind of sizeof and typedef usage get my
attention, where I can read/learn about this typedef trick?
WHAT typedef trick? You mean you never seen something like "blah()"
for 'blah' that is a type?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask