Microsoft KB Archive/168440: Difference between revisions
m (Text replacement - ">" to ">") |
m (Text replacement - "&" to "&") |
||
(One intermediate revision by the same user not shown) | |||
Line 12: | Line 12: | ||
<div id="TitleRow"> | <div id="TitleRow"> | ||
= <span id="KB168440"></span>You may receive an | = <span id="KB168440"></span>You may receive an "error C2593: 'operator <<' is ambiguous" error message when you try to pass an __int64 variable to the ostream operator << = | ||
Line 86: | Line 86: | ||
== STATUS == | == STATUS == | ||
Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the | Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the "Applies to" section.<br /> | ||
<br /> | <br /> | ||
This problem was corrected in Microsoft Visual C++ .NET. | This problem was corrected in Microsoft Visual C++ .NET. | ||
Line 105: | Line 105: | ||
#ifdef WORKAROUND | #ifdef WORKAROUND | ||
std::ostream& | std::ostream& operator<<(std::ostream& os, __int64 i ) | ||
{ | { | ||
char buf[20]; | char buf[20]; | ||
sprintf(buf, | sprintf(buf,"%I64d", i ); | ||
os << buf; | os << buf; | ||
return os; | return os; |
Latest revision as of 12:29, 21 July 2020
Article ID: 168440
Article Last Modified on 5/26/2005
APPLIES TO
- The Standard C++ Library, when used with:
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++ 5.0 Professional Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Standard Edition
This article was previously published under Q168440
SYMPTOMS
If you try to pass an __int64 variable to the ostream operator <<, you get the following error:
CAUSE
There is no operator << for __int64 type defined for the ostream class.
RESOLUTION
Define your own version of operator <<. The following sample code section shows a simple solution for << operator that converts the __int64 variable to a char * type and passes it to the ostream << operator.
STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed in the "Applies to" section.
This problem was corrected in Microsoft Visual C++ .NET.
MORE INFORMATION
The following sample program demonstrates the problem and workaround:
//Sample.cpp // Compiler Options : /GX //#define WORKAROUND //Uncomment this line to workaround #include<iostream> using namespace std; #ifdef WORKAROUND std::ostream& operator<<(std::ostream& os, __int64 i ) { char buf[20]; sprintf(buf,"%I64d", i ); os << buf; return os; } #endif int main(){ __int64 i64; cout << i64 ; return 0; }
Keywords: kberrmsg kbbug kbfix kbcrt kbnoupdate KB168440