-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
bugSomething isn't workingSomething isn't workingchronoC++20 chronoC++20 chronofixedSomething works now, yay!Something works now, yay!formatC++20/23 formatC++20/23 format
Description
Describe the bug
I know that #5893 has been merged, but it seems specific to hh_mm_ss and not duration in general.
The following code does not compile with MSVC 19.latest on godbolt : https://godbolt.org/z/b1ejY1YrK
It also does not compile with MSVC from build tools 2026 (18.0.2), nor with clang 21.1.6 on Windows that uses MSVC STL.
Command-line test case
C:\Temp>type repro.cpp
#include <chrono>
#include <print>
std::string test()
{
const std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
const std::chrono::high_resolution_clock::time_point finish = std::chrono::high_resolution_clock::now();
const std::chrono::nanoseconds delta = finish - start;
size_t frames = 60;
std::chrono::duration<size_t, std::nano> res = delta / frames;
return std::format("{}", res);
}
Expected behavior
This compiles fine on GCC or clang with libc++.
STL version
[cmake] -- The CXX compiler identification is MSVC 19.50.35719.0
- Option 2:
_MSVC_STL_UPDATEvalue
static_assert(202508L == _MSVC_STL_UPDATE); // is true
Additional context
The clang error output if necessary
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:1637:78: error: no matching function for call to 'abs'
[build] 1637 | _Hours{_CHRONO _Duration_cast_underflow_to_zero<_CHRONO hours>(_CHRONO abs(_Dur))},
[build] | ^~~~~~~~~~~
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\yvals_core.h:1946:17: note: expanded from macro '_CHRONO'
[build] 1946 | #define _CHRONO ::std::chrono::
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:5048:37: note: in instantiation of member function 'std::chrono::hh_mm_ss<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>::hh_mm_ss' requested here
[build] 5048 | return _CHRONO _Fill_tm(hh_mm_ss{_Val});
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:5866:55: note: in instantiation of function template specialization 'std::chrono::_Fill_tm<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 5866 | return _Impl._Write(_FormatCtx, _Val, _CHRONO _Fill_tm(_Val));
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\print:295:10: note: in instantiation of function template specialization 'std::_Print_impl<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 295 | _STD _Print_impl(_Add_newline::_Yes, _Stream, _Fmt, _STD forward<_Types>(_Args)...);
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\print:314:10: note: in instantiation of function template specialization 'std::println<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 314 | _STD println(stdout, _Fmt, _STD forward<_Types>(_Args)...);
[build] | ^
[build] C:/Users/Stovent/Dropbox/Dev/CeDImu/benchmarks/benchmarkRenderers.cpp:63:10: note: in instantiation of function template specialization 'std::println<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 63 | std::println("{}/f", delta / FRAMES_CURSOR);
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\__msvc_chrono.hpp:506:50: note: candidate template ignored: requirement 'numeric_limits<unsigned long long>::is_signed' was not satisfied [with _Rep = unsigned long long, _Period = std::ratio<1, 1000000000>]
[build] 506 | _NODISCARD constexpr duration<_Rep, _Period> abs(const duration<_Rep, _Period> _Dur)
[build] | ^
[build] In file included from C:/Users/Stovent/Dropbox/Dev/CeDImu/benchmarks/benchmarkRenderers.cpp:5:
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:1639:64: error: no matching function for call to 'abs'
[build] 1639 | _CHRONO _Remove_duration_part<_CHRONO hours>(_CHRONO abs(_Dur)))},
[build] | ^~~~~~~~~~~
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\yvals_core.h:1946:17: note: expanded from macro '_CHRONO'
[build] 1946 | #define _CHRONO ::std::chrono::
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\__msvc_chrono.hpp:506:50: note: candidate template ignored: requirement 'numeric_limits<unsigned long long>::is_signed' was not satisfied [with _Rep = unsigned long long, _Period = std::ratio<1, 1000000000>]
[build] 506 | _NODISCARD constexpr duration<_Rep, _Period> abs(const duration<_Rep, _Period> _Dur)
[build] | ^
[build] In file included from C:/Users/Stovent/Dropbox/Dev/CeDImu/benchmarks/benchmarkRenderers.cpp:5:
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:1642:68: error: no matching function for call to 'abs'
[build] 1642 | _CHRONO _Remove_duration_part<_CHRONO hours>(_CHRONO abs(_Dur))))} {
[build] | ^~~~~~~~~~~
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\yvals_core.h:1946:17: note: expanded from macro '_CHRONO'
[build] 1946 | #define _CHRONO ::std::chrono::
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\__msvc_chrono.hpp:506:50: note: candidate template ignored: requirement 'numeric_limits<unsigned long long>::is_signed' was not satisfied [with _Rep = unsigned long long, _Period = std::ratio<1, 1000000000>]
[build] 506 | _NODISCARD constexpr duration<_Rep, _Period> abs(const duration<_Rep, _Period> _Dur)
[build] | ^
[build] In file included from C:/Users/Stovent/Dropbox/Dev/CeDImu/benchmarks/benchmarkRenderers.cpp:5:
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:1648:101: error: no matching function for call to 'abs'
[build] 1648 | _CHRONO duration_cast<precision>(_CHRONO _Remove_duration_part<_CHRONO seconds>(_CHRONO abs(_Dur)));
[build] | ^~~~~~~~~~~
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\yvals_core.h:1946:17: note: expanded from macro '_CHRONO'
[build] 1946 | #define _CHRONO ::std::chrono::
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\__msvc_chrono.hpp:506:50: note: candidate template ignored: requirement 'numeric_limits<unsigned long long>::is_signed' was not satisfied [with _Rep = unsigned long long, _Period = std::ratio<1, 1000000000>]
[build] 506 | _NODISCARD constexpr duration<_Rep, _Period> abs(const duration<_Rep, _Period> _Dur)
[build] | ^
[build] In file included from C:/Users/Stovent/Dropbox/Dev/CeDImu/benchmarks/benchmarkRenderers.cpp:5:
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:5624:28: error: call to 'abs' is ambiguous
[build] 5624 | _Os << _STD abs(_Val.count());
[build] | ^~~~~~~~
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\yvals_core.h:1945:17: note: expanded from macro '_STD'
[build] 1945 | #define _STD ::std::
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\chrono:5494:25: note: in instantiation of function template specialization 'std::chrono::_Chrono_formatter<char>::_Custom_write<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 5494 | if (_Custom_write(_Stream, _Spec, _Time, _Val)) {
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\print:295:10: note: in instantiation of function template specialization 'std::_Print_impl<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 295 | _STD _Print_impl(_Add_newline::_Yes, _Stream, _Fmt, _STD forward<_Types>(_Args)...);
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\print:314:10: note: in instantiation of function template specialization 'std::println<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 314 | _STD println(stdout, _Fmt, _STD forward<_Types>(_Args)...);
[build] | ^
[build] C:/Users/Stovent/Dropbox/Dev/CeDImu/benchmarks/benchmarkRenderers.cpp:63:10: note: in instantiation of function template specialization 'std::println<std::chrono::duration<unsigned long long, std::ratio<1, 1000000000>>>' requested here
[build] 63 | std::println("{}/f", delta / FRAMES_CURSOR);
[build] | ^
[build] C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt\stdlib.h:293:34: note: candidate function
[build] 293 | _Check_return_ int __cdecl abs (_In_ int _Number);
[build] | ^
[build] C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt\stdlib.h:363:17: note: candidate function
[build] 363 | inline long abs(long const _X) throw()
[build] | ^
[build] C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt\stdlib.h:368:22: note: candidate function
[build] 368 | inline long long abs(long long const _X) throw()
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\cstdlib:23:41: note: candidate function
[build] 23 | _NODISCARD _Check_return_ inline double abs(_In_ double _Xx) noexcept /* strengthened */ {
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\cstdlib:27:40: note: candidate function
[build] 27 | _NODISCARD _Check_return_ inline float abs(_In_ float _Xx) noexcept /* strengthened */ {
[build] | ^
[build] C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\include\cstdlib:31:46: note: candidate function
[build] 31 | _NODISCARD _Check_return_ inline long double abs(_In_ long double _Xx) noexcept /* strengthened */ {
[build] | ^
[build] 5 errors generated.Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingchronoC++20 chronoC++20 chronofixedSomething works now, yay!Something works now, yay!formatC++20/23 formatC++20/23 format