C:\Temp>type repro.cpp
#include <chrono>
int main() {
std::chrono::duration<std::uint32_t> dur{1};
auto hms = std::chrono::hh_mm_ss(dur);
}
$ cl /EHsc /W4 /WX /std:c++latest repro.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35208 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
/std:c++latest is provided as a preview of language features from the latest C++
working draft, and we're eager to hear about bugs and suggestions for improvements.
However, note that these features are provided as-is without support, and subject
to changes or removal as the working draft evolves. See
https://go.microsoft.com/fwlink/?linkid=2045807 for details.
repro.cpp
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1635): error C2672: 'std::chrono::abs': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(506): note: could be 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1635): note: 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)': could not deduce template argument for '__formal'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(505): note: 'std::enable_if_t<false,int>' : Failed to specialize alias template
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1635): note: the template instantiation context (the oldest one first) is
repro.cpp(5): note: see reference to class template instantiation 'std::chrono::hh_mm_ss<std::chrono::duration<uint32_t,std::ratio<1,1>>>' being compiled
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1633): note: while compiling class template member function 'std::chrono::hh_mm_ss<std::chrono::duration<uint32_t,std::ratio<1,1>>>::hh_mm_ss(_Duration)'
with
[
_Duration=std::chrono::duration<uint32_t,std::ratio<1,1>>
]
repro.cpp(5): note: see the first reference to 'std::chrono::hh_mm_ss<std::chrono::duration<uint32_t,std::ratio<1,1>>>::hh_mm_ss' in 'main'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1635): error C2672: 'std::chrono::_Duration_cast_underflow_to_zero': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1583): note: could be '_To std::chrono::_Duration_cast_underflow_to_zero(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1637): error C2672: 'std::chrono::abs': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(506): note: could be 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1637): note: 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)': could not deduce template argument for '__formal'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(505): note: 'std::enable_if_t<false,int>' : Failed to specialize alias template
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1637): error C2672: 'std::chrono::_Remove_duration_part': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1592): note: could be 'common_type<_Ty1,_Ty2>::type std::chrono::_Remove_duration_part(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1636): error C2672: 'std::chrono::_Duration_cast_underflow_to_zero': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1583): note: could be '_To std::chrono::_Duration_cast_underflow_to_zero(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1639): error C2672: 'std::chrono::abs': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(506): note: could be 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1639): note: 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)': could not deduce template argument for '__formal'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(505): note: 'std::enable_if_t<false,int>' : Failed to specialize alias template
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1639): error C2672: 'std::chrono::_Remove_duration_part': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1592): note: could be 'common_type<_Ty1,_Ty2>::type std::chrono::_Remove_duration_part(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1639): error C2672: 'std::chrono::_Remove_duration_part': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1592): note: could be 'common_type<_Ty1,_Ty2>::type std::chrono::_Remove_duration_part(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1638): error C2672: 'std::chrono::_Duration_cast_underflow_to_zero': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1583): note: could be '_To std::chrono::_Duration_cast_underflow_to_zero(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1644): error C2672: 'std::chrono::abs': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(506): note: could be 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1644): note: 'std::chrono::duration<_Rep,_Period> std::chrono::abs(const std::chrono::duration<_Rep,_Period>) noexcept(<expr>)': could not deduce template argument for '__formal'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(505): note: 'std::enable_if_t<false,int>' : Failed to specialize alias template
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1644): error C2672: 'std::chrono::_Remove_duration_part': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1592): note: could be 'common_type<_Ty1,_Ty2>::type std::chrono::_Remove_duration_part(const _From &)'
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/chrono(1644): error C2672: 'std::chrono::duration_cast': no matching overloaded function found
/home/md5i/src/msvc-wine/msvc/vc/tools/msvc/14.44.35207/include/__msvc_chrono.hpp(87): note: could be '_To std::chrono::duration_cast(const std::chrono::duration<_Rep,_Period> &) noexcept(<expr>)'
The expected behavior is for this to compile.
Describe the bug
An
hh_mm_sscannot be constructed from an unsigned duration.Command-line test case
Expected behavior
The expected behavior is for this to compile.
Additional context
Possibly related: #4144
Compiler explorer output: https://godbolt.org/z/844Wob4av
Similar bug from libstdc++: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108265