$ cat t.cc
struct a {
virtual int bar();
};
struct foo : public virtual a {
};
void test(foo *P) {
return P->bar() + *P;
}
$ gcc-4.2 t.cc
t.cc: In function 'void test(foo*)':
t.cc:9: error: no match for 'operator+' in '(((a*)P) + (*(long int*)(P->foo::<anonymous>.a::_vptr$a + -0x00000000000000020)))->a::bar() + * P'
t.cc:9: error: return-statement with a value, in function returning 'void'
$ clang t.cc
t.cc:9:18: error: invalid operands to binary expression ('int' and 'foo')
return P->bar() + *P;
~~~~~~~~ ^ ~~rah
