This short section of code when compiled with:
g++ -g -O3 -Wformat=2 bug.cpp
complains
{{{
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/i386-redhat-linux/bits/c++locale.h:
In function `int std::__convert_from_v(char*, int, const char*, _Tv,
__locale_struct* const&, int) [with _Tv = double]':
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/bits/locale_facets.tcc:1072:
instantiated from `_OutIter std::num_put<_CharT,
_OutIter>::_M_insert_float(_OutIter, std::ios_base&, _CharT, char, _ValueT)
const [with _ValueT = double, _CharT = char, _OutIter =
std::ostreambuf_iterator<char, std::char_traits<char> >]'
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/bits/locale_facets.tcc:1216:
instantiated from `_OutIter std::num_put<_CharT, _OutIter>::do_put(_OutIter,
std::ios_base&, _CharT, double) const [with _CharT = char, _OutIter =
std::ostreambuf_iterator<char, std::char_traits<char> >]'
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/bits/locale_facets.h:2353:
instantiated from `_OutIter std::num_put<_CharT, _OutIter>::put(_OutIter,
std::ios_base&, _CharT, double) const [with _CharT = char, _OutIter =
std::ostreambuf_iterator<char, std::char_traits<char> >]'
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/bits/ostream.tcc:246:
instantiated from `std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char,
_Traits = std::char_traits<char>]'
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/ostream:219:
instantiated from `std::basic_ostream<_CharT, _Traits>&
std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char,
_Traits = std::char_traits<char>]'
bug.cpp:16: instantiated from here
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/i386-redhat-linux/bits/c++locale.h:84:
warning: format not a string literal, argument types not checked
}}}
Here is the code
{{{
#include <iostream>
#include <vector>
int main(int argc, char* argv)
{
std::vector<float> u(10,17);
for ( std::vector<float>::const_iterator i=u.begin();
i!=u.end(); ++i ) {
const float& f = *i;
const size_t index = i-u.begin();
std::cerr << "values in my vector "
<< index
<< " "
<< f
<< std::endl;
}
return 0;
}
}}}
--
Summary: -O3 -Wformat=2 complains about floats written to ostream
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: myles at peakstreaminc dot com
GCC build triplet: gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26970