Well it seem I was wrong...
btw, no it will not be called through the object, it is only used for name resolution, only virtual functions will be called through virtual tables...
(try assembler output with your favorit compiler (gcc -O0 -c -S below)
sample output
(first one is test::t() ; second is t.t())
call __ZN4test1tEv
call __ZN4test1tEv
here is a non static function call, with object on stack
leal -1(%ebp), %eax
movl %eax, (%esp)
call __ZN4test2t2Ev
And here are a virtual call, with same object on stack but through pointer ofcourse...
movl -28(%ebp), %eax
movl (%eax), %edx
movl -28(%ebp), %eax
movl %eax, (%esp)
movl (%edx), %eax
call *%eax
else it would look like this (trough stack variable)
leal -24(%ebp), %eax
movl %eax, (%esp)
call __ZN4test2t3Ev
Or like this (through obscured reference so it can not know the type)
movl -32(%ebp), %eax
movl (%eax), %edx
movl -32(%ebp), %eax
movl %eax, (%esp)
movl (%edx), %eax
call *%eax
All compiled unoptimized ofcourse