; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 TITLE d:\test\generic_rv_test.cpp .686P .XMM include listing.inc .model flat INCLUDELIB OLDNAMES PUBLIC ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ ; `string' PUBLIC ??BX@@QAEAAV?$rv@UX@@@@XZ ; X::operator rv & PUBLIC ?cast_forward@?$generic_rv@Usome_fn@@X@@QBEXUsome_fn@@@Z ; generic_rv::cast_forward PUBLIC ??Rsome_fn@@QBEXU?$generic_rv@Usome_fn@@X@@@Z ; some_fn::operator() PUBLIC ??$?RH@some_fn@@QBEXAAH@Z ; some_fn::operator() PUBLIC ??$?RH@some_fn@@QBEXABH@Z ; some_fn::operator() PUBLIC ??$make@H@@YAHXZ ; make PUBLIC ??$?RUX@@@some_fn@@QBEXAAUX@@@Z ; some_fn::operator() PUBLIC ??0?$generic_rv@Usome_fn@@X@@QAE@A6AXUsome_fn@@PAX@Z1@Z ; generic_rv::generic_rv PUBLIC ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z ; generic_rv::cast_forward PUBLIC ??$?BUsome_fn@@X@X@@QAE?AU?$generic_rv@Usome_fn@@X@@XZ ; X::operator generic_rv PUBLIC ??$?R$$CBUX@@@some_fn@@QBEXABUX@@@Z ; some_fn::operator() PUBLIC ??0X@@QAE@XZ ; X::X PUBLIC ??$make@UX@@@@YA?AUX@@XZ ; make PUBLIC ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ; std::basic_ostream >::_Sentry_base::_Sentry_base PUBLIC ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ; std::basic_ostream >::sentry::sentry PUBLIC ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream >::_Sentry_base::~_Sentry_base PUBLIC ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream >::sentry::~sentry PUBLIC ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ ; std::basic_ostream >::sentry::operator bool PUBLIC ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > PUBLIC ??$?RUX@@@some_fn@@QBEXAAV?$rv@UX@@@@@Z ; some_fn::operator() PUBLIC ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ ; `string' PUBLIC ??_C@_0CF@FILBBHLH@some_fn?3?3operator?$CI?$CJ?$CIT?5const?5?$CG?$CJ?5c@ ; `string' PUBLIC ??_C@_0CC@IOIEODGA@some_fn?3?3operator?$CI?$CJ?$CIrv?$DMT?$DO?$CG?$CJ?5cons@ ; `string' EXTRN @__security_check_cookie@4:PROC EXTRN __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z:PROC EXTRN __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z:PROC EXTRN __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A:BYTE EXTRN __imp_?length@?$char_traits@D@std@@SAIPBD@Z:PROC EXTRN __imp_?eq_int_type@?$char_traits@D@std@@SA_NABH0@Z:PROC EXTRN __imp_?eof@?$char_traits@D@std@@SAHXZ:PROC EXTRN __imp_?flags@ios_base@std@@QBEHXZ:PROC EXTRN __imp_?width@ios_base@std@@QBEHXZ:PROC EXTRN __imp_?width@ios_base@std@@QAEHH@Z:PROC EXTRN __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z:PROC EXTRN __imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z:PROC EXTRN __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z:PROC EXTRN __imp_?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ:PROC EXTRN __imp_?rdstate@ios_base@std@@QBEHXZ:PROC EXTRN __imp_?good@ios_base@std@@QBE_NXZ:PROC EXTRN __imp_?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ:PROC EXTRN __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ:PROC EXTRN __imp_?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ:PROC EXTRN __imp_?uncaught_exception@std@@YA_NXZ:PROC EXTRN __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ:PROC EXTRN __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ:PROC EXTRN __imp_?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ:PROC ; COMDAT ??_C@_0CC@IOIEODGA@some_fn?3?3operator?$CI?$CJ?$CIrv?$DMT?$DO?$CG?$CJ?5cons@ CONST SEGMENT ??_C@_0CC@IOIEODGA@some_fn?3?3operator?$CI?$CJ?$CIrv?$DMT?$DO?$CG?$CJ?5cons@ DB 's' DB 'ome_fn::operator()(rv&) const', 00H ; `string' CONST ENDS ; COMDAT ??_C@_0CF@FILBBHLH@some_fn?3?3operator?$CI?$CJ?$CIT?5const?5?$CG?$CJ?5c@ CONST SEGMENT ??_C@_0CF@FILBBHLH@some_fn?3?3operator?$CI?$CJ?$CIT?5const?5?$CG?$CJ?5c@ DB 's' DB 'ome_fn::operator()(T const &) const', 00H ; `string' CONST ENDS ; COMDAT ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ CONST SEGMENT ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ DB 's' DB 'ome_fn::operator()(T&) const', 00H ; `string' __bad_alloc_Message DD FLAT:??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ ; COMDAT ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ CONST SEGMENT ??_C@_0P@GHFPNOJB@bad?5allocation?$AA@ DB 'bad allocation', 00H ; `string' ; Function compile flags: /Ogtpy ; File d:\test\generic_rv_test.cpp CONST ENDS ; COMDAT ??0?$generic_rv@Usome_fn@@X@@QAE@A6AXUsome_fn@@PAX@Z1@Z _TEXT SEGMENT ??0?$generic_rv@Usome_fn@@X@@QAE@A6AXUsome_fn@@PAX@Z1@Z PROC ; generic_rv::generic_rv, COMDAT ; _this$ = eax ; _p$ = ecx ; 35 : { } mov DWORD PTR [eax], OFFSET ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z ; generic_rv::cast_forward mov DWORD PTR [eax+4], ecx ret 0 ??0?$generic_rv@Usome_fn@@X@@QAE@A6AXUsome_fn@@PAX@Z1@Z ENDP ; generic_rv::generic_rv ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$make@H@@YAHXZ _TEXT SEGMENT ??$make@H@@YAHXZ PROC ; make, COMDAT ; 104 : template< class T > T make() { return T(); } xor eax, eax ret 0 ??$make@H@@YAHXZ ENDP ; make ; Function compile flags: /Ogtpy ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\ostream _TEXT ENDS ; COMDAT ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ _TEXT SEGMENT ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ PROC ; std::basic_ostream >::_Sentry_base::~_Sentry_base, COMDAT ; _this$ = eax ; 82 : if (_Myostr.rdbuf() != 0) mov eax, DWORD PTR [eax] mov ecx, DWORD PTR [eax] mov edx, DWORD PTR [ecx+4] mov eax, DWORD PTR [edx+eax+40] test eax, eax je SHORT $LN1@Sentry_bas ; 83 : _Myostr.rdbuf()->_Unlock(); mov ecx, eax jmp DWORD PTR __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ $LN1@Sentry_bas: ; 84 : } ret 0 ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ENDP ; std::basic_ostream >::_Sentry_base::~_Sentry_base ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z _TEXT SEGMENT ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z PROC ; std::basic_ostream >::_Sentry_base::_Sentry_base, COMDAT ; _this$ = esi ; __Ostr$ = eax ; 75 : { // lock the stream buffer, if there mov DWORD PTR [esi], eax ; 76 : if (_Myostr.rdbuf() != 0) mov ecx, DWORD PTR [eax] mov edx, DWORD PTR [ecx+4] mov eax, DWORD PTR [edx+eax+40] test eax, eax je SHORT $LN8@Sentry_bas@2 ; 77 : _Myostr.rdbuf()->_Lock(); mov ecx, eax call DWORD PTR __imp_?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ $LN8@Sentry_bas@2: ; 78 : } mov eax, esi ret 0 ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ENDP ; std::basic_ostream >::_Sentry_base::_Sentry_base ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ _TEXT SEGMENT ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ PROC ; std::basic_ostream >::sentry::operator bool, COMDAT ; _this$ = eax ; 116 : return (_Ok); mov al, BYTE PTR [eax+4] ; 117 : } ret 0 ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QBE_NXZ ENDP ; std::basic_ostream >::sentry::operator bool _TEXT ENDS EXTRN ___security_cookie:DWORD EXTRN ___CxxFrameHandler3:PROC ; COMDAT xdata$x ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\ios xdata$x SEGMENT __unwindtable$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ DD 0ffffffffH DD FLAT:__unwindfunclet$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ$0 __ehfuncinfo$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ DD 019930522H DD 01H DD FLAT:__unwindtable$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ DD 2 DUP(00H) DD 2 DUP(00H) DD 00H DD 01H ; Function compile flags: /Ogtpy ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\ostream xdata$x ENDS ; COMDAT ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ _TEXT SEGMENT __$EHRec$ = -12 ; size = 12 _this$ = 8 ; size = 4 ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ PROC ; std::basic_ostream >::sentry::~sentry, COMDAT ; 102 : { // destroy the object push -1 push __ehhandler$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ mov eax, DWORD PTR fs:0 push eax push esi mov eax, DWORD PTR ___security_cookie xor eax, esp push eax lea eax, DWORD PTR __$EHRec$[esp+20] mov DWORD PTR fs:0, eax mov esi, DWORD PTR _this$[esp+16] mov DWORD PTR __$EHRec$[esp+28], 0 ; 103 : ; 104 : #if _HAS_EXCEPTIONS ; 105 : if (!_XSTD uncaught_exception()) call DWORD PTR __imp_?uncaught_exception@std@@YA_NXZ test al, al jne SHORT $LN1@sentry ; 106 : this->_Myostr._Osfx(); mov ecx, DWORD PTR [esi] call DWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ $LN1@sentry: ; 107 : } mov DWORD PTR __$EHRec$[esp+28], -1 mov eax, DWORD PTR [esi] mov ecx, DWORD PTR [eax] mov edx, DWORD PTR [ecx+4] mov eax, DWORD PTR [edx+eax+40] test eax, eax je SHORT $LN5@sentry mov ecx, eax call DWORD PTR __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ $LN5@sentry: mov ecx, DWORD PTR __$EHRec$[esp+20] mov DWORD PTR fs:0, ecx pop ecx pop esi add esp, 12 ; 0000000cH ret 4 _TEXT ENDS ; COMDAT text$x text$x SEGMENT __unwindfunclet$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ$0: mov eax, DWORD PTR _this$[ebp-4] jmp ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream >::_Sentry_base::~_Sentry_base __ehhandler$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ: mov edx, DWORD PTR [esp+8] lea eax, DWORD PTR [edx-4] mov ecx, DWORD PTR [edx-8] xor ecx, eax call @__security_check_cookie@4 mov eax, OFFSET __ehfuncinfo$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ jmp ___CxxFrameHandler3 text$x ENDS ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ENDP ; std::basic_ostream >::sentry::~sentry ; COMDAT xdata$x ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\xiosbase xdata$x SEGMENT __unwindtable$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z DD 0ffffffffH DD FLAT:__unwindfunclet$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z$0 __ehfuncinfo$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z DD 019930522H DD 01H DD FLAT:__unwindtable$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z DD 2 DUP(00H) DD 2 DUP(00H) DD 00H DD 01H ; Function compile flags: /Ogtpy ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\ostream xdata$x ENDS ; COMDAT ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z _TEXT SEGMENT __$EHRec$ = -12 ; size = 12 _this$ = 8 ; size = 4 ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z PROC ; std::basic_ostream >::sentry::sentry, COMDAT ; __Ostr$ = esi ; 95 : { // construct locking and testing stream push -1 push __ehhandler$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z mov eax, DWORD PTR fs:0 push eax push edi mov eax, DWORD PTR ___security_cookie xor eax, esp push eax lea eax, DWORD PTR __$EHRec$[esp+20] mov DWORD PTR fs:0, eax mov edi, DWORD PTR _this$[esp+16] mov DWORD PTR [edi], esi mov eax, DWORD PTR [esi] mov ecx, DWORD PTR [eax+4] mov ecx, DWORD PTR [ecx+esi+40] test ecx, ecx je SHORT $LN5@sentry@2 call DWORD PTR __imp_?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ $LN5@sentry@2: mov DWORD PTR __$EHRec$[esp+28], 0 ; 96 : if (_Ostr.good() && _Ostr.tie() != 0) mov edx, DWORD PTR [esi] mov eax, DWORD PTR [edx+4] add eax, esi cmp DWORD PTR [eax+8], 0 jne SHORT $LN1@sentry@2 mov eax, DWORD PTR [eax+44] test eax, eax je SHORT $LN1@sentry@2 ; 97 : _Ostr.tie()->flush(); mov ecx, eax call DWORD PTR __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ $LN1@sentry@2: ; 98 : _Ok = _Ostr.good(); // store test only after flushing tie mov ecx, DWORD PTR [esi] mov edx, DWORD PTR [ecx+4] cmp DWORD PTR [edx+esi+8], 0 sete al mov BYTE PTR [edi+4], al ; 99 : } mov eax, edi mov ecx, DWORD PTR __$EHRec$[esp+20] mov DWORD PTR fs:0, ecx pop ecx pop edi add esp, 12 ; 0000000cH ret 4 _TEXT ENDS ; COMDAT text$x text$x SEGMENT __unwindfunclet$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z$0: mov eax, DWORD PTR _this$[ebp-4] jmp ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream >::_Sentry_base::~_Sentry_base __ehhandler$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z: mov edx, DWORD PTR [esp+8] lea eax, DWORD PTR [edx-4] mov ecx, DWORD PTR [edx-8] xor ecx, eax call @__security_check_cookie@4 mov eax, OFFSET __ehfuncinfo$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z jmp ___CxxFrameHandler3 text$x ENDS ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ENDP ; std::basic_ostream >::sentry::sentry ; Function compile flags: /Ogtpy ; File d:\test\generic_rv_test.cpp ; COMDAT ?cast_forward@?$generic_rv@Usome_fn@@X@@QBEXUsome_fn@@@Z _TEXT SEGMENT _f$ = 8 ; size = 1 ?cast_forward@?$generic_rv@Usome_fn@@X@@QBEXUsome_fn@@@Z PROC ; generic_rv::cast_forward, COMDAT ; _this$ = eax ; 38 : { return m_cast_forward(f, m_p); } mov ecx, DWORD PTR [eax+4] mov edx, DWORD PTR _f$[esp-4] mov eax, DWORD PTR [eax] push ecx push edx call eax add esp, 8 ret 4 ?cast_forward@?$generic_rv@Usome_fn@@X@@QBEXUsome_fn@@@Z ENDP ; generic_rv::cast_forward ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??Rsome_fn@@QBEXU?$generic_rv@Usome_fn@@X@@@Z _TEXT SEGMENT $T25757 = -4 ; size = 1 _x$ = 8 ; size = 8 ??Rsome_fn@@QBEXU?$generic_rv@Usome_fn@@X@@@Z PROC ; some_fn::operator(), COMDAT ; _this$ = eax ; 101 : { return x.cast_forward(*this); } push ecx mov cl, BYTE PTR [eax] mov edx, DWORD PTR _x$[esp+4] mov BYTE PTR $T25757[esp+4], cl mov eax, DWORD PTR $T25757[esp+4] push edx push eax call DWORD PTR _x$[esp+8] add esp, 12 ; 0000000cH ret 8 ??Rsome_fn@@QBEXU?$generic_rv@Usome_fn@@X@@@Z ENDP ; some_fn::operator() ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??BX@@QAEAAV?$rv@UX@@@@XZ _TEXT SEGMENT ??BX@@QAEAAV?$rv@UX@@@@XZ PROC ; X::operator rv &, COMDAT ; _this$ = eax ; 59 : operator rv&() { return *static_cast< rv* >(this); } ret 0 ??BX@@QAEAAV?$rv@UX@@@@XZ ENDP ; X::operator rv & ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??0X@@QAE@XZ _TEXT SEGMENT ??0X@@QAE@XZ PROC ; X::X, COMDAT ; _this$ = eax ; 52 : X() { } ret 0 ??0X@@QAE@XZ ENDP ; X::X _TEXT ENDS ; COMDAT xdata$x ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\ios xdata$x SEGMENT __unwindtable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 0ffffffffH DD FLAT:__unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$2 DD 00H DD 00H DD 00H DD 00H DD 0ffffffffH DD FLAT:__unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$3 __catchsym$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$4 DD 040H DD 00H DD 00H DD FLAT:__catch$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$0 __tryblocktable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 01H DD 01H DD 02H DD 01H DD FLAT:__catchsym$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$4 __ehfuncinfo$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 019930522H DD 04H DD FLAT:__unwindtable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 01H DD FLAT:__tryblocktable$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z DD 2 DUP(00H) DD 00H DD 01H ; Function compile flags: /Ogtpy ; File c:\program files (x86)\microsoft visual studio 9.0\vc\include\ostream xdata$x ENDS ; COMDAT ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z _TEXT SEGMENT __Ok$ = -32 ; size = 8 $T25823 = -24 ; size = 1 $T25805 = -24 ; size = 1 __State$ = -20 ; size = 4 __$EHRec$ = -16 ; size = 16 __Ostr$ = 8 ; size = 4 __Val$ = 12 ; size = 4 ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z PROC ; std::operator<< >, COMDAT ; 741 : { // insert NTBS into char stream push ebp mov ebp, esp push -1 push __ehhandler$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z mov eax, DWORD PTR fs:0 push eax sub esp, 20 ; 00000014H push ebx push esi push edi mov eax, DWORD PTR ___security_cookie xor eax, ebp push eax lea eax, DWORD PTR __$EHRec$[ebp+4] mov DWORD PTR fs:0, eax mov DWORD PTR __$EHRec$[ebp], esp mov esi, DWORD PTR __Ostr$[ebp] ; 742 : typedef char _Elem; ; 743 : typedef basic_ostream<_Elem, _Traits> _Myos; ; 744 : ios_base::iostate _State = ios_base::goodbit; ; 745 : streamsize _Count = (streamsize)_Traits::length(_Val); // may overflow mov eax, DWORD PTR __Val$[ebp] xor ebx, ebx mov DWORD PTR __State$[ebp], ebx lea edx, DWORD PTR [eax+1] npad 7 $LL72@operator: mov cl, BYTE PTR [eax] inc eax test cl, cl jne SHORT $LL72@operator sub eax, edx mov edi, eax ; 746 : streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count ; 747 : ? 0 : _Ostr.width() - _Count; mov eax, DWORD PTR [esi] mov ecx, DWORD PTR [eax+4] mov eax, DWORD PTR [ecx+esi+24] cmp eax, ebx jle SHORT $LN17@operator cmp eax, edi jle SHORT $LN17@operator sub eax, edi mov ebx, eax $LN17@operator: ; 748 : const typename _Myos::sentry _Ok(_Ostr); lea edx, DWORD PTR __Ok$[ebp] push edx call ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@AAV12@@Z ; std::basic_ostream >::sentry::sentry mov DWORD PTR __$EHRec$[ebp+12], 0 ; 749 : ; 750 : if (!_Ok) cmp BYTE PTR __Ok$[ebp+4], 0 jne SHORT $LN14@operator ; 751 : _State |= ios_base::badbit; mov DWORD PTR __State$[ebp], 4 ; 752 : else jmp SHORT $LN22@operator $LN14@operator: ; 753 : { // state okay, insert ; 754 : _TRY_IO_BEGIN mov BYTE PTR __$EHRec$[ebp+12], 1 ; 755 : if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left) mov eax, DWORD PTR [esi] mov ecx, DWORD PTR [eax+4] mov eax, DWORD PTR [ecx+esi+16] and eax, 448 ; 000001c0H cmp eax, 64 ; 00000040H je SHORT $LN70@operator $LL10@operator: ; 756 : for (; 0 < _Pad; --_Pad) // pad on left test ebx, ebx jle SHORT $LN8@operator ; 757 : if (_Traits::eq_int_type(_Traits::eof(), ; 758 : _Ostr.rdbuf()->sputc(_Ostr.fill()))) mov edx, DWORD PTR [esi] mov eax, DWORD PTR [edx+4] mov cl, BYTE PTR [eax+esi+48] add eax, esi mov eax, DWORD PTR [eax+40] mov BYTE PTR $T25805[ebp], cl mov edx, DWORD PTR $T25805[ebp] push edx mov ecx, eax call DWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z cmp eax, -1 jne $LN9@operator ; 759 : { // insertion failed, quit ; 760 : _State |= ios_base::badbit; or DWORD PTR __State$[ebp], 4 $LN8@operator: ; 761 : break; ; 762 : } ; 763 : ; 764 : if (_State == ios_base::goodbit ; 765 : && _Ostr.rdbuf()->sputn(_Val, _Count) != _Count) cmp DWORD PTR __State$[ebp], 0 jne SHORT $LN2@operator $LN70@operator: mov eax, DWORD PTR [esi] mov ecx, DWORD PTR [eax+4] mov edx, DWORD PTR __Val$[ebp] mov ecx, DWORD PTR [ecx+esi+40] push edi push edx call DWORD PTR __imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z cmp eax, edi je SHORT $LL71@operator ; 766 : _State |= ios_base::badbit; mov DWORD PTR __State$[ebp], 4 $LN2@operator: ; 775 : } ; 776 : _Ostr.width(0); mov eax, DWORD PTR [esi] mov eax, DWORD PTR [eax+4] add eax, esi xor ecx, ecx mov DWORD PTR [eax+24], ecx mov DWORD PTR __$EHRec$[ebp+12], ecx $LN22@operator: ; 778 : } ; 779 : ; 780 : _Ostr.setstate(_State); mov ecx, DWORD PTR __State$[ebp] mov edx, DWORD PTR [esi] push 0 push ecx mov ecx, DWORD PTR [edx+4] add ecx, esi call DWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z ; 781 : return (_Ostr); mov DWORD PTR __$EHRec$[ebp+12], 3 call DWORD PTR __imp_?uncaught_exception@std@@YA_NXZ test al, al jne SHORT $LN56@operator mov ecx, DWORD PTR __Ok$[ebp] call DWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ $LN56@operator: mov DWORD PTR __$EHRec$[ebp+12], -1 mov eax, DWORD PTR __Ok$[ebp] mov ecx, DWORD PTR [eax] mov edx, DWORD PTR [ecx+4] mov ecx, DWORD PTR [edx+eax+40] test ecx, ecx je SHORT $LN74@operator call DWORD PTR __imp_?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ $LN74@operator: mov eax, esi ; 782 : } mov ecx, DWORD PTR __$EHRec$[ebp+4] mov DWORD PTR fs:0, ecx pop ecx pop edi pop esi pop ebx mov esp, ebp pop ebp ret 0 $LN9@operator: ; 756 : for (; 0 < _Pad; --_Pad) // pad on left dec ebx jmp $LL10@operator npad 4 $LL71@operator: ; 767 : ; 768 : if (_State == ios_base::goodbit) ; 769 : for (; 0 < _Pad; --_Pad) // pad on right test ebx, ebx jle SHORT $LN2@operator ; 770 : if (_Traits::eq_int_type(_Traits::eof(), ; 771 : _Ostr.rdbuf()->sputc(_Ostr.fill()))) mov eax, DWORD PTR [esi] mov ecx, DWORD PTR [eax+4] mov dl, BYTE PTR [ecx+esi+48] lea eax, DWORD PTR [ecx+esi] mov eax, DWORD PTR [eax+40] mov BYTE PTR $T25823[ebp], dl mov ecx, DWORD PTR $T25823[ebp] push ecx mov ecx, eax call DWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z cmp eax, -1 jne SHORT $LN3@operator ; 772 : { // insertion failed, quit ; 773 : _State |= ios_base::badbit; or DWORD PTR __State$[ebp], 4 ; 774 : break; jmp $LN2@operator $LN3@operator: ; 767 : ; 768 : if (_State == ios_base::goodbit) ; 769 : for (; 0 < _Pad; --_Pad) // pad on right dec ebx jmp SHORT $LL71@operator __catch$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$0: ; 777 : _CATCH_IO_(_Ostr) mov eax, DWORD PTR __Ostr$[ebp] mov edx, DWORD PTR [eax] mov ecx, DWORD PTR [edx+4] push 1 push 4 add ecx, eax call DWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z mov DWORD PTR __$EHRec$[ebp+12], 0 mov eax, $LN23@operator ret 0 $LN23@operator: mov esi, DWORD PTR __Ostr$[ebp] jmp $LN22@operator _TEXT ENDS ; COMDAT text$x text$x SEGMENT __unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$2: lea eax, DWORD PTR __Ok$[ebp] push eax call ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream >::sentry::~sentry ret 0 __unwindfunclet$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z$3: lea eax, DWORD PTR __Ok$[ebp] jmp ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAE@XZ ; std::basic_ostream >::_Sentry_base::~_Sentry_base __ehhandler$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z: mov edx, DWORD PTR [esp+8] lea eax, DWORD PTR [edx+12] mov ecx, DWORD PTR [edx-36] xor ecx, eax call @__security_check_cookie@4 mov eax, OFFSET __ehfuncinfo$??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z jmp ___CxxFrameHandler3 text$x ENDS ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ENDP ; std::operator<< > ; Function compile flags: /Ogtpy ; File d:\test\generic_rv_test.cpp ; COMDAT ??$?RUX@@@some_fn@@QBEXAAV?$rv@UX@@@@@Z _TEXT SEGMENT ??$?RUX@@@some_fn@@QBEXAAV?$rv@UX@@@@@Z PROC ; some_fn::operator(), COMDAT ; 92 : { std::cout << "some_fn::operator()(rv&) const" << std::endl; } push ecx mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0CC@IOIEODGA@some_fn?3?3operator?$CI?$CJ?$CIrv?$DMT?$DO?$CG?$CJ?5cons@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z pop ecx ret 0 ??$?RUX@@@some_fn@@QBEXAAV?$rv@UX@@@@@Z ENDP ; some_fn::operator() ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$make@UX@@@@YA?AUX@@XZ _TEXT SEGMENT ??$make@UX@@@@YA?AUX@@XZ PROC ; make, COMDAT ; ___$ReturnUdt$ = eax ; 104 : template< class T > T make() { return T(); } ret 0 ??$make@UX@@@@YA?AUX@@XZ ENDP ; make ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$?R$$CBUX@@@some_fn@@QBEXABUX@@@Z _TEXT SEGMENT ??$?R$$CBUX@@@some_fn@@QBEXABUX@@@Z PROC ; some_fn::operator(), COMDAT ; 78 : { std::cout << "some_fn::operator()(T&) const" << std::endl; } push ecx mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z pop ecx ret 0 ??$?R$$CBUX@@@some_fn@@QBEXABUX@@@Z ENDP ; some_fn::operator() ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$?RUX@@@some_fn@@QBEXAAUX@@@Z _TEXT SEGMENT ??$?RUX@@@some_fn@@QBEXAAUX@@@Z PROC ; some_fn::operator(), COMDAT ; 78 : { std::cout << "some_fn::operator()(T&) const" << std::endl; } push ecx mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z pop ecx ret 0 ??$?RUX@@@some_fn@@QBEXAAUX@@@Z ENDP ; some_fn::operator() ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$?RH@some_fn@@QBEXABH@Z _TEXT SEGMENT ??$?RH@some_fn@@QBEXABH@Z PROC ; some_fn::operator(), COMDAT ; 83 : { std::cout << "some_fn::operator()(T const &) const" << std::endl; } push ecx mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0CF@FILBBHLH@some_fn?3?3operator?$CI?$CJ?$CIT?5const?5?$CG?$CJ?5c@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z pop ecx ret 0 ??$?RH@some_fn@@QBEXABH@Z ENDP ; some_fn::operator() ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$?RH@some_fn@@QBEXAAH@Z _TEXT SEGMENT ??$?RH@some_fn@@QBEXAAH@Z PROC ; some_fn::operator(), COMDAT ; 78 : { std::cout << "some_fn::operator()(T&) const" << std::endl; } push ecx mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z pop ecx ret 0 ??$?RH@some_fn@@QBEXAAH@Z ENDP ; some_fn::operator() ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z _TEXT SEGMENT _f$ = 8 ; size = 1 _p$ = 12 ; size = 4 ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z PROC ; generic_rv::cast_forward, COMDAT ; 41 : static Result cast_forward(F f, void* const p) mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push eax push OFFSET ??_C@_0CC@IOIEODGA@some_fn?3?3operator?$CI?$CJ?$CIrv?$DMT?$DO?$CG?$CJ?5cons@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 8 mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 42 : { return f(static_cast< rv& >(*static_cast< T* >(p))); } ret 0 ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z ENDP ; generic_rv::cast_forward ; Function compile flags: /Ogtpy _TEXT ENDS ; COMDAT ??$?BUsome_fn@@X@X@@QAE?AU?$generic_rv@Usome_fn@@X@@XZ _TEXT SEGMENT ??$?BUsome_fn@@X@X@@QAE?AU?$generic_rv@Usome_fn@@X@@XZ PROC ; X::operator generic_rv, COMDAT ; _this$ = ecx ; ___$ReturnUdt$ = eax ; 67 : return generic_rv< F, Result >( ; 68 : generic_rv< F, Result >::template cast_forward, ; 69 : static_cast< void* >(this) ; 70 : ); mov DWORD PTR [eax], OFFSET ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z ; generic_rv::cast_forward mov DWORD PTR [eax+4], ecx ; 71 : } ret 0 ??$?BUsome_fn@@X@X@@QAE?AU?$generic_rv@Usome_fn@@X@@XZ ENDP ; X::operator generic_rv _TEXT ENDS PUBLIC _main ; Function compile flags: /Ogtpy ; COMDAT _main _TEXT SEGMENT $T25928 = -5 ; size = 1 $T25927 = -4 ; size = 1 _argc$ = 8 ; size = 4 _argv$ = 12 ; size = 4 _main PROC ; COMDAT ; 107 : { push ebp mov ebp, esp and esp, -8 ; fffffff8H sub esp, 8 ; 108 : int a = 0; ; 109 : int const b = 0; ; 110 : some_fn()(a); // some_fn::operator()(T&) const mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 111 : some_fn()(b); // some_fn::operator()(T const &) const mov edx, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z mov eax, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push edx push ecx push OFFSET ??_C@_0CF@FILBBHLH@some_fn?3?3operator?$CI?$CJ?$CIT?5const?5?$CG?$CJ?5c@ push eax call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 112 : some_fn()(make< int >()); // some_fn::operator()(T const &) const mov ecx, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z mov edx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push ecx push ecx push OFFSET ??_C@_0CF@FILBBHLH@some_fn?3?3operator?$CI?$CJ?$CIT?5const?5?$CG?$CJ?5c@ push edx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 113 : X x; ; 114 : X const y; ; 115 : some_fn()(x); // some_fn::operator()(T&) const mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 116 : some_fn()(y); // some_fn::operator()(T&) const mov edx, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z mov eax, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push edx push ecx push OFFSET ??_C@_0BO@BPFPJPDD@some_fn?3?3operator?$CI?$CJ?$CIT?$CG?$CJ?5const?$AA@ push eax call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 117 : some_fn()(make()); // some_fn::operator()(rv&) const lea ecx, DWORD PTR $T25928[esp+8] mov BYTE PTR $T25927[esp+8], 0 mov edx, DWORD PTR $T25927[esp+8] push ecx push edx call ??$cast_forward@UX@@@?$generic_rv@Usome_fn@@X@@SAXUsome_fn@@QAX@Z ; generic_rv::cast_forward ; 118 : some_fn()(static_cast< rv& >(make())); // some_fn::operator()(rv&) const mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z add esp, 8 push eax push ecx mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A push OFFSET ??_C@_0CC@IOIEODGA@some_fn?3?3operator?$CI?$CJ?$CIrv?$DMT?$DO?$CG?$CJ?5cons@ push ecx call ??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<< > add esp, 12 ; 0000000cH mov ecx, eax call DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; 119 : return 0; xor eax, eax ; 120 : } mov esp, ebp pop ebp ret 0 _main ENDP _TEXT ENDS END