blob: 3b0f7a19fcf402ce1eac4fb2f78e013dee3a5c06 [file] [log] [blame]
Eric Fiselier31cb7fe2015-02-10 16:46:42 +00001#ifndef SUPPORT_USER_DEFINED_INTEGRAL_HPP
2#define SUPPORT_USER_DEFINED_INTEGRAL_HPP
3
4template <class T>
5struct UserDefinedIntegral
6{
7 UserDefinedIntegral() : value(0) {}
8 UserDefinedIntegral(T v) : value(v) {}
9 operator T() const { return value; }
10 T value;
11};
12
13// Poison the arithmetic and comparison operations
14template <class T, class U>
15void operator+(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
16
17template <class T, class U>
18void operator-(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
19
20template <class T, class U>
21void operator*(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
22
23template <class T, class U>
24void operator/(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
25
26template <class T, class U>
27void operator==(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
28
29template <class T, class U>
30void operator!=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
31
32template <class T, class U>
33void operator<(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
34
35template <class T, class U>
36void operator>(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
37
38template <class T, class U>
39void operator<=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
40
41template <class T, class U>
42void operator>=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
43
44#endif // SUPPORT_USER_DEFINED_INTEGRAL_HPP