| #include "../unsupported/Eigen/SpecialFunctions" |
| |
| // A custom scalar that does not provide erfc. Eigen's approximations are tuned |
| // for float and double and are not valid for it, so numext::erfc must be |
| // rejected at compile time instead of computing a wrong result. |
| namespace custom_scalar { |
| struct CustomReal { |
| double value; |
| }; |
| #ifndef EIGEN_SHOULD_FAIL_TO_BUILD |
| inline CustomReal erfc(const CustomReal& x) { return CustomReal{std::erfc(x.value)}; } |
| #endif |
| } // namespace custom_scalar |
| |
| namespace Eigen { |
| template <> |
| struct NumTraits<custom_scalar::CustomReal> : NumTraits<double> { |
| using Real = custom_scalar::CustomReal; |
| using NonInteger = custom_scalar::CustomReal; |
| using Nested = custom_scalar::CustomReal; |
| }; |
| } // namespace Eigen |
| |
| int main() { return Eigen::numext::erfc(custom_scalar::CustomReal{0.5}).value > 0.0 ? 0 : 1; } |