**File:** modules/core/include/opencv2/core/hal/intrin.hpp
**Change Type:** modified
**Context:** PR #26109: Replace operators with wrapper functions on universal intrinsics backends

**Code Changes:**
```diff
@@ -717,44 +717,70 @@ namespace CV__SIMD_NAMESPACE {
     /** @brief SIMD processing state cleanup call */
     inline void vx_cleanup() { VXPREFIX(_cleanup)(); }
 
-#if !CV_SIMD_SCALABLE && !(CV_NEON && !defined(CV_FORCE_SIMD128_CPP))
+#if !CV_SIMD_SCALABLE
     // Compatibility layer
-
+#if !(CV_NEON && !defined(CV_FORCE_SIMD128_CPP))
     template<typename T> struct VTraits {
```

Review comment:
This function causes a compilation error, which recursively calls itself. But it should call the `v_add` function from other backends. This function works well but fails with intrin_cpp.hpp`. ``` In file included from /home/wanli/workspace/opencv_china/opencv/modules/core/test/test_intrin128.simd.hpp:7, from /home/wanli/workspace/opencv_china/opencv/modules/core/test/test_intrin_emulator.cpp:14: /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp: In instantiation of ‘cv::hal_EMULATOR_CPP::simd128_cpp::v_uint8 cv::hal_EMULATOR_CPP::simd128_cpp::v_add(const v_uint8&, const v_uint8&, const Args& ...) [with Args = {}; v_uint8 = cv::hal_EMULATOR_CPP::v_reg<unsigned char, 16>]’: /home/wanli/workspace/opencv_china/opencv/modules/core/test/test_intrin_utils.hpp:491:29: required from ‘opencv_test::hal::intrin128::opt_EMULATOR_CPP::TheTest<R>& opencv_test::hal::intrin128::opt_EMULATOR_CPP::TheTest<R>::test_addsub() [with R = cv::hal_EMULATOR_CPP::v_reg<unsigned char, 16>]’ /home/wanli/workspace/opencv_china/opencv/modules/core/test/test_intrin_utils.hpp:1923:21: required from here /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:732:21: error: no matching function for call to ‘v_add(cv::hal_EMULATOR_CPP::simd128_cpp::v_uint8)’ 732 | return v_add(v_add(f1, f2), vf...); \ | ~~~~~^~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:735:5: note: in expansion of macro ‘OPENCV_HAL_WRAP_BIN_OP_ADDSUB’ 735 | OPENCV_HAL_WRAP_BIN_OP_ADDSUB(v_uint8) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:731:19: note: candidate: ‘template<class ... Args> cv::hal_EMULATOR_CPP::simd128_cpp::v_uint8 cv::hal_EMULATOR_CPP::simd128_cpp::v_add(const v_uint8&, const v_uint8&, const Args& ...)’ 731 | inline _Tpvec v_add(const _Tpvec& f1, const _Tpvec& f2, const Args&... vf) { \ | ^~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:735:5: note: in expansion of macro ‘OPENCV_HAL_WRAP_BIN_OP_ADDSUB’ 735 | OPENCV_HAL_WRAP_BIN_OP_ADDSUB(v_uint8) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:731:19: note: template argument deduction/substitution failed: 731 | inline _Tpvec v_add(const _Tpvec& f1, const _Tpvec& f2, const Args&... vf) { \ | ^~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:735:5: note: in expansion of macro ‘OPENCV_HAL_WRAP_BIN_OP_ADDSUB’ 735 | OPENCV_HAL_WRAP_BIN_OP_ADDSUB(v_uint8) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:732:21: note: candidate expects at least 2 arguments, 1 provided 732 | return v_add(v_add(f1, f2), vf...); \ | ~~~~~^~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:735:5: note: in expansion of macro ‘OPENCV_HAL_WRAP_BIN_OP_ADDSUB’ 735 | OPENCV_HAL_WRAP_BIN_OP_ADDSUB(v_uint8) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:247: /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:576:55: note: candidate: ‘template<class _Tp, int n> cv::hal_EMULATOR_CPP::v_reg<_Tp, n> cv::hal_EMULATOR_CPP::v_add(const v_reg<_Tp, n>&, const v_reg<_Tp, n>&)’ 576 | template<typename _Tp, int n> CV_INLINE v_reg<_Tp, n> v_add(const v_reg<_Tp, n>& a, const v_reg<_Tp, n>& b); | ^~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:576:55: note: template argument deduction/substitution failed: /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:732:21: note: candidate expects 2 arguments, 1 provided 732 | return v_add(v_add(f1, f2), vf...); \ | ~~~~~^~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin.hpp:735:5: note: in expansion of macro ‘OPENCV_HAL_WRAP_BIN_OP_ADDSUB’ 735 | OPENCV_HAL_WRAP_BIN_OP_ADDSUB(v_uint8) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core.hpp:52, from /home/wanli/workspace/opencv_china/opencv/modules/ts/include/opencv2/ts.hpp:10, from /home/wanli/workspace/opencv_china/opencv/modules/core/test/test_precomp.hpp:9, from /home/wanli/workspace/opencv_china/opencv/modules/core/test/test_intrin_emulator.cpp:4: /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:647:31: note: candidate: ‘template<int n> cv::hal_EMULATOR_CPP::v_reg<unsigned char, n> cv::hal_EMULATOR_CPP::v_add(const v_reg<unsigned char, n>&, const v_reg<unsigned char, n>&)’ 647 | CV__HAL_INTRIN_IMPL_BIN_OP(+, v_add) | ^~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/cvdef.h:79:24: note: in definition of macro ‘__CV_EXPAND’ 79 | #define __CV_EXPAND(x) x | ^ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:618:13: note: in expansion of macro ‘CV__HAL_INTRIN_IMPL_BIN_OP_’ 618 | __CV_EXPAND(macro_name(uchar, __VA_ARGS__)) \ | ^~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:632:1: note: in expansion of macro ‘CV__HAL_INTRIN_EXPAND_WITH_INTEGER_TYPES’ 632 | CV__HAL_INTRIN_EXPAND_WITH_INTEGER_TYPES(macro_name, __VA_ARGS__) \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:645:50: note: in expansion of macro ‘CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES’ 645 | #define CV__HAL_INTRIN_IMPL_BIN_OP(bin_op, func) CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES(CV__HAL_INTRIN_IMPL_BIN_OP_, bin_op, func) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:647:1: note: in expansion of macro ‘CV__HAL_INTRIN_IMPL_BIN_OP’ 647 | CV__HAL_INTRIN_IMPL_BIN_OP(+, v_add) | ^~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:647:31: note: template argument deduction/substitution failed: 647 | CV__HAL_INTRIN_IMPL_BIN_OP(+, v_add) | ^~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/cvdef.h:79:24: note: in definition of macro ‘__CV_EXPAND’ 79 | #define __CV_EXPAND(x) x | ^ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:618:13: note: in expansion of macro ‘CV__HAL_INTRIN_IMPL_BIN_OP_’ 618 | __CV_EXPAND(macro_name(uchar, __VA_ARGS__)) \ | ^~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:632:1: note: in expansion of macro ‘CV__HAL_INTRIN_EXPAND_WITH_INTEGER_TYPES’ 632 | CV__HAL_INTRIN_EXPAND_WITH_INTEGER_TYPES(macro_name, __VA_ARGS__) \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/wanli/workspace/opencv_china/opencv/modules/core/include/opencv2/core/hal/intrin_cpp.hpp:645:50: note: in expansion of macro ‘CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES’ 645 | #define CV__HAL_INTRIN_IMPL_BIN_OP(bin_op, func) CV__HAL_INTRIN_EXPAND_WITH_ALL_TYPES(CV__HAL_INTRIN_IMPL_BIN_OP_, bin_op, func) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ................. ```