Opened 13 years ago
Closed 12 years ago
#3563 closed Patches (fixed)
Warnings using g++ 4.4.0 on date_time/posix_time/conversion.hpp
Reported by: | anonymous | Owned by: | az_sw_dude |
---|---|---|---|
Milestone: | Boost 1.42.0 | Component: | date_time |
Version: | Boost 1.43.0 | Severity: | Cosmetic |
Keywords: | Cc: |
Description
On MinGW with version 4.4.0 of "g++ -Wall -Wextra -O2":
C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp: In function 'tm boost::posix_time::to_tm(const boost::posix_time::time_duration&)': C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_sec' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_min' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_hour' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_mday' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_mon' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_year' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_wday' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_yday' C:/Boost/include/boost-1_40/boost/date_time/posix_time/conversion.hpp:45: warning: missing initializer for member 'tm::tm_isdst'
Can't we explicitly initialize the tm members that should be zero'ed instead of using "timetm = {}" to get rid of this annoying warning?
Change History (6)
comment:1 by , 13 years ago
Version: | Boost 1.40.0 → Boost 1.42.0 |
---|
comment:2 by , 13 years ago
Explicit initialization isn't really a portable option, since some platforms don't define tm::tm_gmtoff or tm::tm_zone. std::memset from cstring would do the trick, and it's something used elsewhere in the boost libraries.
I have a local change from boost-trunk that fixes g++ warnings. This might not be the best fix, but it has me up and running locally without suppressing g++ warnings for my own code.
Index: posix_time/conversion.hpp =================================================================== --- posix_time/conversion.hpp (revision 59528) +++ posix_time/conversion.hpp (working copy) @@ -8,7 +8,7 @@ * Author: Jeff Garland, Bart Garst * $Date$ */ - +#include <cstring> #include <boost/date_time/posix_time/ptime.hpp> #include <boost/date_time/posix_time/posix_time_duration.hpp> #include <boost/date_time/filetime_functions.hpp> @@ -43,7 +43,8 @@ //! Convert a time_duration to a tm structure truncating any fractional seconds and zeroing fields for date components inline std::tm to_tm(const boost::posix_time::time_duration& td) { - std::tm timetm = {}; + std::tm timetm; + std::memset(&timetm, 0, sizeof(timetm)); timetm.tm_hour = date_time::absolute_value(td.hours()); timetm.tm_min = date_time::absolute_value(td.minutes()); timetm.tm_sec = date_time::absolute_value(td.seconds()); Index: gregorian/conversion.hpp =================================================================== --- gregorian/conversion.hpp (revision 59528) +++ gregorian/conversion.hpp (working copy) @@ -9,6 +9,7 @@ * $Date$ */ +#include <cstring> #include <string> #include <stdexcept> #include <boost/throw_exception.hpp> @@ -41,7 +42,8 @@ boost::throw_exception(std::out_of_range(s)); } - std::tm datetm = {}; // zero initialization is needed for extension members, like tm_zone + std::tm datetm; + std::memset(&datetm, 0, sizeof(datetm)); boost::gregorian::date::ymd_type ymd = d.year_month_day(); datetm.tm_year = ymd.year - 1900; datetm.tm_mon = ymd.month - 1;
comment:4 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:5 by , 12 years ago
Resolution: | fixed |
---|---|
Status: | closed → reopened |
Version: | Boost 1.42.0 → Boost 1.43.0 |
Better to zero-initialize with: std::tm timetm = std::tm();
comment:6 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
There is no conceptual difference. And the problem is fixed.
This is also happening on my Ubuntu-9.10 distribution with g++-4.3.2. I have boost-1.42 installed. I cannot build any code using this header (even indirectly) with -W and -Werror enabled.
This bug reproduces with the minimal source included below. Compile it with -Werror and -W:
Build with