namespace std {
namespace chrono {
// duration % N = duration
template <class Rep1, class Period, class Rep2>
duration<typename common_type<Rep1, Rep2>::type, Period>
constexpr operator%(const duration<Rep1, Period>& d,
const Rep2& s); // (1)
// duration % duration = duration
template <class Rep1, class Period1, class Rep2, class Period2>
typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type
constexpr operator%(const duration<Rep1, Period1>& lhs,
const duration<Rep2, Period2>& rhs); // (2)
}}
概要
durationの剰余演算を行う
テンプレートパラメータ制約
- (1) :
is_convertible_v<const Rep2&, common_type_t<Rep1, Rep2>>
がtrue
であり、かつRep2
がduration
の特殊化でないこと
戻り値
- (1)
using cd = duration<typename common_type<Rep1, Rep2>::type, Period>;
return cd(cd(d).count() % s);
- (2)
using cd = duration<typename common_type<Rep1, Rep2>::type, Period>;
return cd(cd(lhs).count() % cd(rhs).count());
例
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
// duration % rep
{
seconds s = seconds(8) % 3;
std::cout << s.count() << std::endl;
milliseconds ms = milliseconds(8) % 3;
std::cout << ms.count() << std::endl;
}
// duration % duration
{
seconds s = seconds(8) % seconds(3);
std::cout << s.count() << std::endl;
milliseconds ms = milliseconds(8) % milliseconds(3);
std::cout << ms.count() << std::endl;
}
}
出力
2
2
2
2
バージョン
言語
- C++11
処理系
- GCC: 4.6.1 ✅
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅
- 2012, 2013でサンプルコードをコンパイルしたところ、duration % durationでコンパイルエラーになった。