2024-12-08 08:57:12 +00:00
<!DOCTYPE html> < html lang = 'en' >< head >< title > [qty.chrono]</ title >< meta charset = 'UTF-8' />< link rel = 'stylesheet' type = 'text/css' href = '14882.css' />< link rel = 'stylesheet' type = 'text/css' href = 'https://fonts.googleapis.com/css2?family=Noto+Serif' />< link rel = 'stylesheet' type = 'text/css' href = 'https://fonts.googleapis.com/css2?family=Noto+Sans' />< link rel = 'stylesheet' type = 'text/css' href = 'https://fonts.googleapis.com/css2?family=Noto+Sans+Mono' />< link rel = 'icon' href = 'icon.png' />< link rel = 'stylesheet' type = 'text/css' href = 'expanded.css' title = 'Normal' />< link rel = 'alternate stylesheet' type = 'text/css' href = 'colored.css' title = 'Notes and examples colored' />< link rel = 'alternate stylesheet' type = 'text/css' href = 'normative-only.css' title = 'Notes and examples hidden' /></ head >< body >< div class = 'wrapper' >< h1 >< a class = 'secnum' style = 'min-width:50pt' > 5</ a > Quantities and units library < a class = 'abbr_ref' href = 'index.html#quantities' > [quantities]</ a ></ h1 >< h2 >< a class = 'secnum' style = 'min-width:65pt' > 5.9</ a > < span class = 'texttt' > std​ ::​ chrono</ span > interoperability < a class = 'abbr_ref' > [qty.chrono]</ a ></ h2 >< div class = 'texpara' >< span class = 'codeblock' >< span class = 'keyword' > namespace</ span > mp_units < span class = 'curlybracket' > {</ span >
< span class = 'keyword' > template</ span >< span class = 'anglebracket' > < </ span >< span class = 'keyword' > typename</ span > Period< span class = 'anglebracket' > > </ span >
< span class = 'keyword' > consteval</ span > < span class = 'keyword' > auto</ span > < i > time-unit-from-chrono-period</ i >< span class = 'parenthesis' > (</ span >< span class = 'parenthesis' > )</ span >
< span class = 'curlybracket' > {</ span >
< span class = 'keyword' > using</ span > < span class = 'keyword' > namespace</ span > si;
< span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > nanoseconds< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > nano< span class = 'anglebracket' > < </ span > second< span class = 'anglebracket' > > </ span > ;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > microseconds< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > micro< span class = 'anglebracket' > < </ span > second< span class = 'anglebracket' > > </ span > ;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > milliseconds< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > milli< span class = 'anglebracket' > < </ span > second< span class = 'anglebracket' > > </ span > ;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > seconds< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > second;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > minutes< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > minute;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > hours< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > hour;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > days< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > day;
< span class = 'keyword' > else</ span > < span class = 'keyword' > if</ span > < span class = 'keyword' > constexpr</ span > < span class = 'parenthesis' > (</ span > is_same_v< span class = 'anglebracket' > < </ span > Period, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > weeks< span class = 'operator' > ::</ span > period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'keyword' > return</ span > mag< span class = 'anglebracket' > < </ span >< span class = 'literal' > 7</ span >< span class = 'anglebracket' > > </ span > < span class = 'operator' > *</ span > day;
< span class = 'keyword' > else</ span >
< span class = 'keyword' > return</ span > mag_ratio< span class = 'anglebracket' > < </ span > Period< span class = 'operator' > ::</ span > num, Period< span class = 'operator' > ::</ span > den< span class = 'anglebracket' > > </ span > < span class = 'operator' > *</ span > second;
< span class = 'curlybracket' > }</ span >
< span class = 'keyword' > template</ span >< span class = 'anglebracket' > < </ span >< span class = 'keyword' > typename</ span > Rep, < span class = 'keyword' > typename</ span > Period< span class = 'anglebracket' > > </ span >
< span class = 'keyword' > struct</ span > < a class = 'index' id = 'lib:quantity_like_traits,std::chrono::duration' ></ a > quantity_like_traits< span class = 'anglebracket' > < </ span > std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > duration< span class = 'anglebracket' > < </ span > Rep, Period< span class = 'anglebracket' > > </ span >< span class = 'anglebracket' > > </ span > < span class = 'curlybracket' > {</ span >
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > auto</ span > reference < span class = 'operator' > =</ span > < i > time-unit-from-chrono-period</ i >< span class = 'anglebracket' > < </ span > Period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > (</ span >< span class = 'parenthesis' > )</ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > bool</ span > explicit_import < span class = 'operator' > =</ span > < span class = 'literal' > false</ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > bool</ span > explicit_export < span class = 'operator' > =</ span > < span class = 'literal' > false</ span > ;
< span class = 'keyword' > using</ span > rep < span class = 'operator' > =</ span > Rep;
< span class = 'keyword' > using</ span > < i > T</ i > < span class = 'operator' > =</ span > std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > duration< span class = 'anglebracket' > < </ span > Rep, Period< span class = 'anglebracket' > > </ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > rep to_numerical_value< span class = 'parenthesis' > (</ span >< span class = 'keyword' > const</ span > < i > T</ i >< span class = 'operator' > & </ span > q< span class = 'parenthesis' > )</ span > < span class = 'keyword' > noexcept</ span >< span class = 'parenthesis' > (</ span >
std< span class = 'operator' > ::</ span > is_nothrow_copy_constructible_v< span class = 'anglebracket' > < </ span > rep< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'curlybracket' > {</ span >
< span class = 'keyword' > return</ span > q< span class = 'operator' > .</ span > count< span class = 'parenthesis' > (</ span >< span class = 'parenthesis' > )</ span > ;
< span class = 'curlybracket' > }</ span >
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < i > T</ i > from_numerical_value< span class = 'parenthesis' > (</ span >< span class = 'keyword' > const</ span > rep< span class = 'operator' > & </ span > v< span class = 'parenthesis' > )</ span > < span class = 'keyword' > noexcept</ span >< span class = 'parenthesis' > (</ span >
std< span class = 'operator' > ::</ span > is_nothrow_copy_constructible_v< span class = 'anglebracket' > < </ span > rep< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'curlybracket' > {</ span >
< span class = 'keyword' > return</ span > < i > T</ i >< span class = 'parenthesis' > (</ span > v< span class = 'parenthesis' > )</ span > ;
< span class = 'curlybracket' > }</ span >
< span class = 'curlybracket' > }</ span > ;
< span class = 'keyword' > template</ span >< span class = 'anglebracket' > < </ span >< span class = 'keyword' > typename</ span > Clock< span class = 'anglebracket' > > </ span >
< span class = 'keyword' > struct</ span > < span id = 'lib:chrono_point_origin_' >< a class = 'hidden_link' href = '#lib:chrono_point_origin_' title = '5.9 std​::​chrono interoperability [qty.chrono]' > chrono_point_origin_</ a ></ span > < span class = 'keyword' > final</ span > < span class = 'operator' > :</ span > absolute_point_origin< span class = 'anglebracket' > < </ span > isq< span class = 'operator' > ::</ span > time< span class = 'anglebracket' > > </ span > < span class = 'curlybracket' > {</ span >
< span class = 'keyword' > using</ span > clock < span class = 'operator' > =</ span > Clock;
< span class = 'curlybracket' > }</ span > ;
< span class = 'keyword' > template</ span >< span class = 'anglebracket' > < </ span >< span class = 'keyword' > typename</ span > Clock, < span class = 'keyword' > typename</ span > Rep, < span class = 'keyword' > typename</ span > Period< span class = 'anglebracket' > > </ span >
< span class = 'keyword' > struct</ span > < a class = 'index' id = 'lib:quantity_point_like_traits,std::chrono::time_point' ></ a > quantity_point_like_traits< span class = 'anglebracket' > < </ span >
std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > time_point< span class = 'anglebracket' > < </ span > Clock, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > duration< span class = 'anglebracket' > < </ span > Rep, Period< span class = 'anglebracket' > > </ span >< span class = 'anglebracket' > > </ span >< span class = 'anglebracket' > > </ span > < span class = 'curlybracket' > {</ span >
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > auto</ span > reference < span class = 'operator' > =</ span > < i > time-unit-from-chrono-period</ i >< span class = 'anglebracket' > < </ span > Period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > (</ span >< span class = 'parenthesis' > )</ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > auto</ span > point_origin < span class = 'operator' > =</ span > chrono_point_origin< span class = 'anglebracket' > < </ span > Clock< span class = 'anglebracket' > > </ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > bool</ span > explicit_import < span class = 'operator' > =</ span > < span class = 'literal' > false</ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < span class = 'keyword' > bool</ span > explicit_export < span class = 'operator' > =</ span > < span class = 'literal' > false</ span > ;
< span class = 'keyword' > using</ span > rep < span class = 'operator' > =</ span > Rep;
< span class = 'keyword' > using</ span > < i > T</ i > < span class = 'operator' > =</ span > std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > time_point< span class = 'anglebracket' > < </ span > Clock, std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > duration< span class = 'anglebracket' > < </ span > Rep, Period< span class = 'anglebracket' > > </ span >< span class = 'anglebracket' > > </ span > ;
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > rep to_numerical_value< span class = 'parenthesis' > (</ span >< span class = 'keyword' > const</ span > < i > T</ i >< span class = 'operator' > & </ span > tp< span class = 'parenthesis' > )</ span > < span class = 'keyword' > noexcept</ span >< span class = 'parenthesis' > (</ span >
std< span class = 'operator' > ::</ span > is_nothrow_copy_constructible_v< span class = 'anglebracket' > < </ span > rep< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'curlybracket' > {</ span >
< span class = 'keyword' > return</ span > tp< span class = 'operator' > .</ span > time_since_epoch< span class = 'parenthesis' > (</ span >< span class = 'parenthesis' > )</ span >< span class = 'operator' > .</ span > count< span class = 'parenthesis' > (</ span >< span class = 'parenthesis' > )</ span > ;
< span class = 'curlybracket' > }</ span >
< span class = 'keyword' > static</ span > < span class = 'keyword' > constexpr</ span > < i > T</ i > from_numerical_value< span class = 'parenthesis' > (</ span >< span class = 'keyword' > const</ span > rep< span class = 'operator' > & </ span > v< span class = 'parenthesis' > )</ span > < span class = 'keyword' > noexcept</ span >< span class = 'parenthesis' > (</ span >
std< span class = 'operator' > ::</ span > is_nothrow_copy_constructible_v< span class = 'anglebracket' > < </ span > rep< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > )</ span >
< span class = 'curlybracket' > {</ span >
< span class = 'keyword' > return</ span > < i > T</ i >< span class = 'parenthesis' > (</ span > std< span class = 'operator' > ::</ span > chrono< span class = 'operator' > ::</ span > duration< span class = 'anglebracket' > < </ span > Rep, Period< span class = 'anglebracket' > > </ span >< span class = 'parenthesis' > (</ span > v< span class = 'parenthesis' > )</ span >< span class = 'parenthesis' > )</ span > ;
< span class = 'curlybracket' > }</ span >
< span class = 'curlybracket' > }</ span > ;
< span class = 'curlybracket' > }</ span >
</ span ></ div ></ div ></ body ></ html >