Skip to content

lambda created in template function which depends on ExecutionPolicy template parameter. #2283

@SergeyKopienko

Description

@SergeyKopienko

[__value](auto&& __a) { return std::ranges::equal_to{}(__a, __value);}, __proj);

namespace __internal
{

struct __remove_fn
{
    template<typename _ExecutionPolicy, std::ranges::random_access_range _R, typename _Proj = std::identity,
             typename _T = oneapi::dpl::projected_value_t<std::ranges::iterator_t<_R>, _Proj>>
    requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<_ExecutionPolicy>>
        && std::permutable<std::ranges::iterator_t<_R>> && std::indirect_binary_predicate<std::ranges::equal_to,
            std::projected<std::ranges::iterator_t<_R>, _Proj>, const _T*> && std::ranges::sized_range<_R>

    std::ranges::borrowed_subrange_t<_R>
    operator()(_ExecutionPolicy&& __exec, _R&& __r, const _T& __value, _Proj __proj = {}) const
    {
        return oneapi::dpl::ranges::remove_if(std::forward<_ExecutionPolicy>(__exec), std::forward<_R>(__r),
            [__value](auto&& __a) { return std::ranges::equal_to{}(__a, __value);}, __proj);
    }

}; //__remove_fn
} //__internal

This mean we have one instance for each value category of __exec -> potential error in unique Kernel names.

Probably you introduce more then one place like that, please re-check.

It was introduced in the PR #2100

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions