blob: 383b65f72e3f0f3d059b0bf5d3e9465c62d82455 [file] [log] [blame]
Eric Fiselier38236b52016-01-19 21:52:04 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
Eric Fiselier51544022015-02-10 16:46:42 +00009#ifndef SUPPORT_USER_DEFINED_INTEGRAL_HPP
10#define SUPPORT_USER_DEFINED_INTEGRAL_HPP
11
12template <class T>
13struct UserDefinedIntegral
14{
15 UserDefinedIntegral() : value(0) {}
16 UserDefinedIntegral(T v) : value(v) {}
17 operator T() const { return value; }
18 T value;
19};
20
21// Poison the arithmetic and comparison operations
22template <class T, class U>
23void operator+(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
24
25template <class T, class U>
26void operator-(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
27
28template <class T, class U>
29void operator*(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
30
31template <class T, class U>
32void operator/(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
33
34template <class T, class U>
35void operator==(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
36
37template <class T, class U>
38void operator!=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
39
40template <class T, class U>
41void operator<(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
42
43template <class T, class U>
44void operator>(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
45
46template <class T, class U>
47void operator<=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
48
49template <class T, class U>
50void operator>=(UserDefinedIntegral<T>, UserDefinedIntegral<U>);
51
52#endif // SUPPORT_USER_DEFINED_INTEGRAL_HPP