Skip to content

Clang warning: -Wliteral-conversion in toolbox::TimeInterval construction

Summary

Building with clang++ produces -Wliteral-conversion warnings. They are probably unintended.

Steps to reproduce

Configure with CC=clang CXX=clang++ cmake ... and build.

What is the expected correct behavior?

No -Wliteral-conversion warnings.

Relevant logs and/or screenshots

[20/98] Building CXX object gembase/CMakeFiles/gembase.dir/src/GEMMonitor.cpp.o
../gembase/src/GEMMonitor.cpp:73:85: warning: implicit conversion from 'double' to 'time_t' (aka 'long') changes value from 2.5 to 2 [-Wliteral-conversion]
    addInfoSpace("Application", gemFSMApp->getAppISToolBox(), toolbox::TimeInterval(2.5, 0));
                                                              ~~~~~~~               ^~~
../gembase/src/GEMMonitor.cpp:79:97: warning: implicit conversion from 'double' to 'time_t' (aka 'long') changes value from 2.5 to 2 [-Wliteral-conversion]
    addInfoSpace("AppStateMonitoring", gemFSMApp->getAppStateISToolBox(), toolbox::TimeInterval(2.5, 0));
                                                                          ~~~~~~~               ^~~
2 warnings generated.
[42/98] Building CXX object gemhardware/managers/CMakeFiles/gemhardware_managers.dir/src/amc13/AMC13Manager.cpp.o
../gemhardware/managers/src/amc13/AMC13Manager.cpp:520:40: warning: implicit conversion from 'double' to 'time_t' (aka 'long') changes value from 0.1 to 0 [-Wliteral-conversion]
        toolbox::TimeInterval interval(0.1, 0); // period of 0.1 secs
                              ~~~~~~~~ ^~~
3 warnings generated.

Environment

  • Version used: develop
  • Operation System: gem904daq04

Possible fixes

Drop the second argument. timebox::TimeInterval has two constructors:

// Constructor from seconds/microseconds pair.
TimeInterval (time_t sec, suseconds_t usec);

// Constructor from double.
TimeInterval (double d);

Add -Werror=literal-conversion because this warning usually finds mistakes.

Edited by Laurent Petre