Skip to content

Commit 923b9c5

Browse files
test/support/utils_sycl_defs.h - fix compile error: incomplete type 'TestUtils::TestPolicyName' named in nested name specifier
Building CXX object test/CMakeFiles/header_inclusion_order_async_0.pass.dir/general/header_inclusion_order_async_0.pass.cpp.o In file included from /test/general/header_inclusion_order_async_0.pass.cpp:19: In file included from /test/support/utils.h:47: In file included from /test/support/utils_test_base.h:25: In file included from /test/support/utils_invoke.h:25: /test/support/utils_sycl_defs.h:53:1: error: incomplete type 'TestUtils::TestPolicyName' named in nested name specifier 53 | using new_kernel_name = unique_kernel_name<typename std::decay_t<Policy>::kernel_name, idx>; | ^~~~~ /test/support/utils_invoke.h:132:39: note: in instantiation of template type alias 'new_kernel_name' requested here 132 | using _NewKernelName = TestUtils::new_kernel_name<PolicyName, call_id>; | ^ /test/general/header_inclusion_order_async_0.pass.cpp:26:30: note: in instantiation of function template specialization 'TestUtils::get_dpcpp_test_policy<0, TestUtils::TestPolicyName>' requested here 26 | auto policy = TestUtils::get_dpcpp_test_policy(); | ^ /test/support/utils_invoke.h:126:8: note: forward declaration of 'TestUtils::TestPolicyName' 126 | struct TestPolicyName; | ^ 1 error generated.
1 parent 323f0f7 commit 923b9c5

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

test/support/utils_sycl_defs.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,32 @@ uniq_kernel_index()
4949
template <typename Op, std::size_t CallNumber>
5050
struct unique_kernel_name;
5151

52+
template <typename T, typename = std::void_t<>>
53+
struct has_kernel_name : std::false_type
54+
{
55+
};
56+
57+
template <typename T>
58+
struct has_kernel_name<T, std::void_t<typename T::kernel_name>> : std::true_type
59+
{
60+
};
61+
62+
template <typename Policy, std::size_t CallNumber, typename = void>
63+
struct new_kernel_name_impl
64+
{
65+
static_assert(!has_kernel_name<std::decay_t<Policy>>::value);
66+
using type = unique_kernel_name<std::decay_t<Policy>, CallNumber>;
67+
};
68+
69+
template <typename Policy, std::size_t CallNumber>
70+
struct new_kernel_name_impl<Policy, CallNumber, std::enable_if_t<has_kernel_name<std::decay_t<Policy>>::value>>
71+
{
72+
static_assert(has_kernel_name<std::decay_t<Policy>>::value);
73+
using type = unique_kernel_name<typename std::decay_t<Policy>::kernel_name, CallNumber>;
74+
};
75+
5276
template <typename Policy, std::size_t idx>
53-
using new_kernel_name = unique_kernel_name<typename std::decay_t<Policy>::kernel_name, idx>;
77+
using new_kernel_name = typename new_kernel_name_impl<Policy, idx>::type;
5478

5579
} /* namespace TestUtils */
5680

0 commit comments

Comments
 (0)