12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //===----------------------------------------------------------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef REP_H
- #define REP_H
- #include "test_macros.h"
- class Rep
- {
- int data_;
- public:
- TEST_CONSTEXPR Rep() : data_(-1) {}
- explicit TEST_CONSTEXPR Rep(int i) : data_(i) {}
- bool TEST_CONSTEXPR operator==(int i) const {return data_ == i;}
- bool TEST_CONSTEXPR operator==(const Rep& r) const {return data_ == r.data_;}
- Rep& operator*=(Rep x) {data_ *= x.data_; return *this;}
- Rep& operator/=(Rep x) {data_ /= x.data_; return *this;}
- };
- // This is PR#41130
- struct NotARep {};
- // std::chrono:::duration has only '*', '/' and '%' taking a "Rep" parameter
- // Multiplication is commutative, division is not.
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>
- operator*(std::chrono::duration<Rep, Period> d, NotARep) { return d; }
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>
- operator*(NotARep, std::chrono::duration<Rep, Period> d) { return d; }
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>
- operator/(std::chrono::duration<Rep, Period> d, NotARep) { return d; }
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>
- operator%(std::chrono::duration<Rep, Period> d, NotARep) { return d; }
- // op= is not commutative.
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>&
- operator*=(std::chrono::duration<Rep, Period>& d, NotARep) { return d; }
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>&
- operator/=(std::chrono::duration<Rep, Period>& d, NotARep) { return d; }
- template <class Rep, class Period>
- std::chrono::duration<Rep, Period>&
- operator%=(std::chrono::duration<Rep, Period>& d, NotARep) { return d; }
- #endif // REP_H
|