This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ostringstream long long problem on Alpha/Tru64 with latest gcc3.2.1


Hello,

I've found some problem with using ostringstream class on Alpha/Tru64
machine with latest gcc 3.2.1 (20021117).

Following code fails to compile with this compiler:

#include <sstream>
#include <iostream>

using namespace std;

int
main()
{
  ostringstream str;
  long long i = 9223372036854775807;
#ifdef LONG_CAST
#warning "casting long long to long"
  str << (long)i;
#else // LONG_CAST
  str << i;
#endif // LONG_CAST
  string s1 = str.str();
  cout << s1 << endl;
  return 0;
}

The only solution which I've found is to explicitly cast to long (i.e. use
-DLONG_CAST during compilation) otherwise gcc will throw error messages
which are below.

I've tried this code with HP/Compaq's CXX compiler too, and it's perfectly
ok with the code above - the only one problem was that I need to define
__USE_STD_IOSTREAM symbol. All compiled binaries (cxx, cxx
-DLONG_CAST, gcc -DLONG_CAST) produces the same output.

bash-2.04$ cxx -D__USE_STD_IOSTREAM -DLONG_CAST test.cc -o testcxx-cast
cxx: Warning: test.cc, line 12: unrecognized preprocessing directive
#warning "casting long long to long"
-^
bash-2.04$ cxx -D__USE_STD_IOSTREAM test.cc -o testcxx
bash-2.04$ c++ -DLONG_CAST test.cc -o testgcc
test.cc:12:2: warning: #warning "casting long long to long"
bash-2.04$ ./testcxx
9223372036854775807
bash-2.04$ ./testcxx-cast
9223372036854775807
bash-2.04$ ./testgcc
9223372036854775807
bash-2.04$

My gcc was configured with:

bash-2.04$ c++ -v
Reading specs from
/house/kgardas/usr/local/alpha-osf1/bin/../lib/gcc-lib/alphaev68-dec-osf5.1/3.2.1/specs
Configured with: ../gcc3.2/configure --prefix=/house/kgardas/usr/local/alpha-osf1/ --enable-shared --enable-threads --enable-languages=c++
Thread model: single
gcc version 3.2.1 20021117 (prerelease)
bash-2.04$

and compiled with:

 make CFLAGS='-O' LIBCFLAGS='-g -O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap-lean

Is this real problem in gcc/libstdc++ or is this some problem in my code?

Thanks,

Karel

PS: compilation with gcc w/o explicit long cast fails with:

bash-2.04$ c++ test.cc
test.cc: In function `int main()':
test.cc:15: ambiguous overload for `std::ostringstream& << long long int&'
   operator
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:55:
candidates
   are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::operator<<(std::basic_ostream<_CharT,
   _Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT =
char,
   _Traits = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:77:
              std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(std::basic_ios<_CharT,
   _Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char,
_Traits
   = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:99:
              std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(std::ios_base&(*)(std::ios_base&)) [with _CharT =
char,
   _Traits = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:171:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(long int) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:208:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:146:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(bool) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:104:
      std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::operator<<(short int) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:115:
      std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:119:
      std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::operator<<(int) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:130:
      std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:298:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(double) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:145:
      std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::operator<<(float) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:323:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(long double) [with _CharT = char, _Traits =
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:348:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(const void*) [with _CharT = char, _Traits =
   std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:120:
               std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT,
   _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with
_CharT =
   char, _Traits = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:211:
      std::basic_ostream<_CharT, _Traits>&
   std::operator<<(std::basic_ostream<_CharT, _Traits>&, char) [with
_CharT =
   char, _Traits = std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:500:
               std::basic_ostream<char, _Traits>&
   std::operator<<(std::basic_ostream<char, _Traits>&, char) [with _Traits
=
   std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:222:
      std::basic_ostream<char, _Traits>&
   std::operator<<(std::basic_ostream<char, _Traits>&, signed char) [with
   _Traits = std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:227:
      std::basic_ostream<char, _Traits>&
   std::operator<<(std::basic_ostream<char, _Traits>&, unsigned char)
[with
   _Traits = std::char_traits<char>]
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:572:
               std::basic_ostream<_CharT, _Traits>&
   std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*)
[with
   _CharT = char, _Traits = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/bits/ostream.tcc:622:
               std::basic_ostream<char, _Traits>&
   std::operator<<(std::basic_ostream<char, _Traits>&, const char*) [with
   _Traits = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:246:
      std::basic_ostream<char, _Traits>&
   std::operator<<(std::basic_ostream<char, _Traits>&, const signed char*)
   [with _Traits = std::char_traits<char>] <near match>
/house/kgardas/usr/local/alpha-osf1/include/c++/3.2.1/ostream:251:
      std::basic_ostream<char, _Traits>&
   std::operator<<(std::basic_ostream<char, _Traits>&, const unsigned
char*)
   [with _Traits = std::char_traits<char>] <near match>
--
Karel Gardas                  kgardas@objectsecurity.com
ObjectSecurity Ltd.           http://www.objectsecurity.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]