//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef SUPPORT_USER_DEFINED_INTEGRAL_HPP #define SUPPORT_USER_DEFINED_INTEGRAL_HPP template struct UserDefinedIntegral { UserDefinedIntegral() : value(0) {} UserDefinedIntegral(T v) : value(v) {} operator T() const { return value; } T value; }; // Poison the arithmetic and comparison operations template void operator+(UserDefinedIntegral, UserDefinedIntegral); template void operator-(UserDefinedIntegral, UserDefinedIntegral); template void operator*(UserDefinedIntegral, UserDefinedIntegral); template void operator/(UserDefinedIntegral, UserDefinedIntegral); template void operator==(UserDefinedIntegral, UserDefinedIntegral); template void operator!=(UserDefinedIntegral, UserDefinedIntegral); template void operator<(UserDefinedIntegral, UserDefinedIntegral); template void operator>(UserDefinedIntegral, UserDefinedIntegral); template void operator<=(UserDefinedIntegral, UserDefinedIntegral); template void operator>=(UserDefinedIntegral, UserDefinedIntegral); #endif // SUPPORT_USER_DEFINED_INTEGRAL_HPP