Opened 10 years ago

Closed 10 years ago

Last modified 7 years ago

#7068 closed Bugs (invalid)

Compiler warnings in date_time

Reported by: ZenJu <zhnmju123@…> Owned by: az_sw_dude
Milestone: To Be Determined Component: date_time
Version: Boost 1.51.0 Severity: Problem
Keywords: Cc: zhnmju123@…

Description

In reference to: https://svn.boost.org/trac/boost/ticket/7045

The following warnings are issued for GCC 4.6 and 4.7 both MinGW and Linux GCC with "-wall" for boost 1.50:

C:\Program Files\C++\Boost\boost\date_time\gregorian\conversion.hpp||In function 'tm boost::gregorian::to_tm(const boost::gregorian::date&)':|
C:\Program Files\C++\Boost\boost\date_time\gregorian\conversion.hpp|33|warning: enumeration value 'min_date_time' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\gregorian\conversion.hpp|33|warning: enumeration value 'max_date_time' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\gregorian\conversion.hpp|33|warning: enumeration value 'not_special' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\gregorian\conversion.hpp|33|warning: enumeration value 'NumSpecialValues' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp||In instantiation of 'static boost::date_time::int_adapter<int_type_> boost::date_time::int_adapter<int_type_>::from_special(boost::date_time::special_values) [with int_type_ = unsigned int; boost::date_time::int_adapter<int_type_> = boost::date_time::int_adapter<unsigned int>]':|
C:\Program Files\C++\Boost\boost\date_time\gregorian\greg_date.hpp|53|required from here|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'not_special' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'NumSpecialValues' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp||In instantiation of 'static boost::date_time::int_adapter<int_type_> boost::date_time::int_adapter<int_type_>::from_special(boost::date_time::special_values) [with int_type_ = long int; boost::date_time::int_adapter<int_type_> = boost::date_time::int_adapter<long int>]':|
C:\Program Files\C++\Boost\boost\date_time\date_duration.hpp|42|required from 'boost::date_time::date_duration<duration_rep_traits>::date_duration(boost::date_time::special_values) [with duration_rep_traits = boost::date_time::duration_traits_adapted]'|
C:\Program Files\C++\Boost\boost\date_time\gregorian\greg_duration.hpp|39|required from here|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'not_special' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'NumSpecialValues' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp||In instantiation of 'static boost::date_time::int_adapter<int_type_> boost::date_time::int_adapter<int_type_>::from_special(boost::date_time::special_values) [with int_type_ = long long int; boost::date_time::int_adapter<int_type_> = boost::date_time::int_adapter<long long int>]':|
C:\Program Files\C++\Boost\boost\date_time\time_duration.hpp|69|required from 'boost::date_time::time_duration<T, rep_type>::time_duration(boost::date_time::special_values) [with T = boost::posix_time::time_duration; rep_type = boost::date_time::time_resolution_traits<boost::date_time::time_resolution_traits_adapted64_impl, (boost::date_time::time_resolutions)5u, 1000000ll, 6u>]'|
C:\Program Files\C++\Boost\boost\date_time\posix_time\posix_time_config.hpp|82|required from here|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'not_special' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'NumSpecialValues' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\time_system_counted.hpp||In instantiation of 'static boost::date_time::counted_time_system<time_rep>::time_rep_type boost::date_time::counted_time_system<time_rep>::get_time_rep(boost::date_time::special_values) [with time_rep = boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>; boost::date_time::counted_time_system<time_rep>::time_rep_type = boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config>]':|
C:\Program Files\C++\Boost\boost\date_time\time.hpp|67|required from 'boost::date_time::base_time<T, time_system>::base_time(boost::date_time::special_values) [with T = boost::posix_time::ptime; time_system = boost::date_time::counted_time_system<boost::date_time::counted_time_rep<boost::posix_time::millisec_posix_time_system_config> >]'|
C:\Program Files\C++\Boost\boost\date_time\posix_time\ptime.hpp|51|required from here|
C:\Program Files\C++\Boost\boost\date_time\time_system_counted.hpp|149|warning: enumeration value 'not_special' not handled in switch [-Wswitch-enum]|
C:\Program Files\C++\Boost\boost\date_time\time_system_counted.hpp|149|warning: enumeration value 'NumSpecialValues' not handled in switch [-Wswitch-enum]|

Also boost::thread has a linker dependency to boost::date_time on VC10 and VC11 (but not on GCC). It was indicated in the other ticket this might not be intended.

Regards, ZenJu

Change History (4)

comment:1 by ZenJu <zhnmju123@…>, 10 years ago

Cc: zhnmju123@… added

comment:2 by Marshall Clow, 10 years ago

Ok. I looked at these warnings, and they are all bogus. For example, in int_adapter.hpp, we have:

72:    switch (sv) {
73:      case not_a_date_time: return not_a_number();
74:      case neg_infin:       return neg_infinity();
75:      case pos_infin:       return pos_infinity();
76:      case max_date_time:   return (max)();
77:      case min_date_time:   return (min)();
78:      default:              return not_a_number();
79:    }

which (apparently) gives an error of: C:\Program Files\C++\Boost\boost\date_time\int_adapter.hpp|75|warning: enumeration value 'not_special' not handled in switch [-Wswitch-enum]|

That's absurd. not_special is definitely handled here; it's spelled default.

conversion.hpp(33) - this problem.
int_adapter.hpp(75) - this problem.
time_system_counted.hpp(149) - this problem.

I suggest that you turn off this warning and report it as a bug against gcc.

comment:3 by Marshall Clow, 10 years ago

Resolution: invalid
Status: newclosed

comment:4 by andrewtrapani@…, 7 years ago

Hi,

I ran across this today and wanted to offer an opinion. In the example above by marshall, the default catches everything not listed and returns NaN.

Now if we add a new enum value "foobar", it will automatically return NaN. But what if we forgot to edit the above switch when we actually needed foobar to return foobar_value() as in some value other than NaN?

The flipside is now we are forcing the coder to write out all of the cases.

    switch (sv) {
      case not_a_date_time: return not_a_number();
      case neg_infin:       return neg_infinity();
      case pos_infin:       return pos_infinity();
      case max_date_time:   return (max)();
      case min_date_time:   return (min)();
      case foobar:          return foobar_value();
      case foo:
      case bar:
      case fizz:
      //and so on all fall into default or else we get a bunch of warnings
      default:              return not_a_number();
    }

It looks like this feature is not ready for usage unless something changes about the enum declaration options in newer C++ version.

Note: See TracTickets for help on using tickets.