#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