Skip to content

Commit c66d01d

Browse files
committed
Forward declare and specialize trait in one place
Signed-off-by: Larsen, Steffen <[email protected]>
1 parent a531a18 commit c66d01d

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

sycl/include/sycl/ext/oneapi/device_global/device_global.hpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ namespace sycl {
4040
inline namespace _V1 {
4141
namespace ext::oneapi::experimental {
4242

43+
template <typename T, typename PropertyListT> class device_global;
44+
4345
namespace detail {
4446
// Type-trait for checking if a type defines `operator->`.
4547
template <typename T, typename = void>
@@ -49,10 +51,19 @@ struct HasArrowOperator<T,
4951
std::void_t<decltype(std::declval<T>().operator->())>>
5052
: std::true_type {};
5153

54+
template <typename T, typename PropertyListT, typename>
55+
class device_global_base;
56+
5257
// Checks that T is a reference to either device_global or
5358
// device_global_base. This is used by the variadic ctor to allow copy ctors to
5459
// take preference.
5560
template <typename T> struct IsDeviceGlobalOrBaseRef : std::false_type {};
61+
template <typename T, typename PropertyListT>
62+
struct IsDeviceGlobalOrBaseRef<device_global_base<T, PropertyListT, void> &>
63+
: std::true_type {};
64+
template <typename T, typename PropertyListT>
65+
struct IsDeviceGlobalOrBaseRef<device_global<T, PropertyListT> &>
66+
: std::true_type {};
5667

5768
// Base class for device_global.
5869
template <typename T, typename PropertyListT, typename = void>
@@ -179,10 +190,6 @@ class device_global_base<
179190
}
180191
};
181192

182-
template <typename T, typename PropertyListT>
183-
struct IsDeviceGlobalOrBaseRef<const device_global_base<T, PropertyListT> &>
184-
: std::true_type {};
185-
186193
} // namespace detail
187194

188195
template <typename T, typename PropertyListT = empty_properties_t>
@@ -305,12 +312,6 @@ class
305312
}
306313
};
307314

308-
namespace detail {
309-
template <typename T, typename PropertyListT>
310-
struct IsDeviceGlobalOrBaseRef<device_global<T, PropertyListT> &>
311-
: std::true_type {};
312-
} // namespace detail
313-
314315
} // namespace ext::oneapi::experimental
315316
} // namespace _V1
316317
} // namespace sycl

0 commit comments

Comments
 (0)