Skip to content

fmt chrono fails for clock minimum value #3282

Closed
@m5k8

Description

@m5k8

https://godbolt.org/z/GbbvMb3bE

    #include <iostream>
    #include <chrono>
    #include <fmt/format.h>
    #include <fmt/chrono.h>
    
    int main(void)
    {
        // OK:
        // auto t = std::chrono::system_clock::time_point::max();
        // failure:
        auto t = std::chrono::system_clock::time_point::min();
        fmt::print("{}\n", t);
        return 0;
    }

Result:

    terminate called after throwing an instance of 'fmt::v9::format_error'
      what():  duration is too small

Code in chrono.h:2113 explicitly checks for one second above min() and fails for value= min(). For max(), works OK. Until recently, it worked fine for min(). This commit: 240b728 added the offending code. I'm not sure about the intent of this test. I discovered the issue, because one of my tests started to fail. min() value seems to be legal value, albeit used not too often.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions