http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53186
--- Comment #3 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 2012-05-03 06:42:46 UTC --- not bad… hope it could be back ported to 4.7.1 c++ -std=gnu++11 -c opFinal.cpp; nm opFinal.o; otool -t -v -V -X opFinal.o | c++filt 00000000000000b0 s EH_frame1 0000000000000021 T __Z4fooAR1A 0000000000000060 T __Z5fooF1R2F1 0000000000000094 T __Z5fooF2R2F2 0000000000000000 T __Z6fooAopR1A 0000000000000046 T __Z7fooF1opR2F1 000000000000007a T __Z7fooF2opR2F2 U __ZN2F11mEv U __ZN2F1clEv U __ZN2F21mEv U __ZN2F2clEv fooAop(A&): pushq %rbp movq %rsp,%rbp subq $0x10,%rsp movq %rdi,0xf8(%rbp) movq 0xf8(%rbp),%rax movq (%rax),%rax movq (%rax),%rax movq 0xf8(%rbp),%rdx movq %rdx,%rdi call *%rax leave ret fooA(A&): pushq %rbp movq %rsp,%rbp subq $0x10,%rsp movq %rdi,0xf8(%rbp) movq 0xf8(%rbp),%rax movq (%rax),%rax addq $0x08,%rax movq (%rax),%rax movq 0xf8(%rbp),%rdx movq %rdx,%rdi call *%rax leave ret fooF1op(F1&): pushq %rbp movq %rsp,%rbp subq $0x10,%rsp movq %rdi,0xf8(%rbp) movq 0xf8(%rbp),%rax movq %rax,%rdi callq F1::operator()() leave ret fooF1(F1&): pushq %rbp movq %rsp,%rbp subq $0x10,%rsp movq %rdi,0xf8(%rbp) movq 0xf8(%rbp),%rax movq %rax,%rdi callq F1::m() leave ret fooF2op(F2&): pushq %rbp movq %rsp,%rbp subq $0x10,%rsp movq %rdi,0xf8(%rbp) movq 0xf8(%rbp),%rax movq %rax,%rdi callq F2::operator()() leave ret fooF2(F2&): pushq %rbp movq %rsp,%rbp subq $0x10,%rsp movq %rdi,0xf8(%rbp) movq 0xf8(%rbp),%rax movq %rax,%rdi callq F2::m() leave ret