xref: /llvm-project/libcxx/test/support/user_defined_integral.h (revision 480cd780d63fd9c658cc2f51d0c54416b8b1a5c3)
1cc89063bSNico Weber //===----------------------------------------------------------------------===//
2cc89063bSNico Weber //
3cc89063bSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4cc89063bSNico Weber // See https://llvm.org/LICENSE.txt for license information.
5cc89063bSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cc89063bSNico Weber //
7cc89063bSNico Weber //===----------------------------------------------------------------------===//
8*480cd780SLouis Dionne 
9cc89063bSNico Weber #ifndef SUPPORT_USER_DEFINED_INTEGRAL_H
10cc89063bSNico Weber #define SUPPORT_USER_DEFINED_INTEGRAL_H
11cc89063bSNico Weber 
1213c90a57SLouis Dionne #include "test_macros.h"
1313c90a57SLouis Dionne 
14cc89063bSNico Weber template <class T>
15cc89063bSNico Weber struct UserDefinedIntegral
16cc89063bSNico Weber {
UserDefinedIntegralUserDefinedIntegral1713c90a57SLouis Dionne     TEST_CONSTEXPR_CXX14 UserDefinedIntegral() : value(0) {}
UserDefinedIntegralUserDefinedIntegral1813c90a57SLouis Dionne     TEST_CONSTEXPR_CXX14 UserDefinedIntegral(T v) : value(v) {}
TUserDefinedIntegral1913c90a57SLouis Dionne     TEST_CONSTEXPR_CXX14 operator T() const { return value; }
20cc89063bSNico Weber     T value;
21cc89063bSNico Weber };
22cc89063bSNico Weber 
23cc89063bSNico Weber // Poison the arithmetic and comparison operations
24cc89063bSNico Weber template <class T, class U>
25cc89063bSNico Weber void operator+(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
26cc89063bSNico Weber 
27cc89063bSNico Weber template <class T, class U>
28cc89063bSNico Weber void operator-(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
29cc89063bSNico Weber 
30cc89063bSNico Weber template <class T, class U>
31cc89063bSNico Weber void operator*(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
32cc89063bSNico Weber 
33cc89063bSNico Weber template <class T, class U>
34cc89063bSNico Weber void operator/(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
35cc89063bSNico Weber 
36cc89063bSNico Weber template <class T, class U>
37cc89063bSNico Weber void operator==(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
38cc89063bSNico Weber 
39cc89063bSNico Weber template <class T, class U>
40cc89063bSNico Weber void operator!=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
41cc89063bSNico Weber 
42cc89063bSNico Weber template <class T, class U>
43cc89063bSNico Weber void operator<(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
44cc89063bSNico Weber 
45cc89063bSNico Weber template <class T, class U>
46cc89063bSNico Weber void operator>(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
47cc89063bSNico Weber 
48cc89063bSNico Weber template <class T, class U>
49cc89063bSNico Weber void operator<=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
50cc89063bSNico Weber 
51cc89063bSNico Weber template <class T, class U>
52cc89063bSNico Weber void operator>=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
53cc89063bSNico Weber 
54cc89063bSNico Weber #endif // SUPPORT_USER_DEFINED_INTEGRAL_H
55