@@ -1179,10 +1179,22 @@ template <typename Type, int NumElements> class vec {
1179
1179
return Ret;
1180
1180
}
1181
1181
1182
+ template <typename T>
1183
+ #if defined(__INTEL_PREVIEW_BREAKING_CHANGES)
1184
+ using OpNotRet = detail::rel_t <T>;
1185
+ #else
1186
+ using OpNotRet = T;
1187
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
1188
+
1182
1189
// operator!
1183
1190
template <typename T = DataT, int N = NumElements>
1184
- EnableIfNotUsingArray<vec<T, N>> operator !() const {
1185
- return vec<T, N>{(typename vec<DataT, NumElements>::DataType) !m_Data};
1191
+ EnableIfNotUsingArray<vec<OpNotRet<T>, N>> operator !() const {
1192
+ return vec<T, N>{(typename vec<DataT, NumElements>::DataType) !m_Data}
1193
+ #if defined(__INTEL_PREVIEW_BREAKING_CHANGES)
1194
+ .template as <vec<OpNotRet<T>, N>>();
1195
+ #else
1196
+ ;
1197
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
1186
1198
}
1187
1199
1188
1200
// std::byte neither supports ! unary op or casting, so special handling is
@@ -1191,32 +1203,44 @@ template <typename Type, int NumElements> class vec {
1191
1203
template <typename T = DataT, int N = NumElements>
1192
1204
typename std::enable_if_t <std::is_same_v<std::byte, T> &&
1193
1205
(IsUsingArrayOnDevice || IsUsingArrayOnHost),
1194
- vec<T , N>>
1206
+ vec<OpNotRet<T> , N>>
1195
1207
operator !() const {
1196
1208
vec Ret{};
1197
1209
for (size_t I = 0 ; I < NumElements; ++I) {
1198
1210
Ret.setValue (I, std::byte{!vec_data<DataT>::get (getValue (I))});
1199
1211
}
1212
+ #if defined(__INTEL_PREVIEW_BREAKING_CHANGES)
1213
+ return Ret.template as <vec<OpNotRet<T>, N>>();
1214
+ #else
1200
1215
return Ret;
1216
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
1201
1217
}
1202
1218
1203
1219
template <typename T = DataT, int N = NumElements>
1204
1220
typename std::enable_if_t <!std::is_same_v<std::byte, T> &&
1205
1221
(IsUsingArrayOnDevice || IsUsingArrayOnHost),
1206
- vec<T , N>>
1222
+ vec<OpNotRet<T> , N>>
1207
1223
operator !() const {
1208
1224
vec Ret{};
1209
1225
for (size_t I = 0 ; I < NumElements; ++I)
1210
1226
Ret.setValue (I, !vec_data<DataT>::get (getValue (I)));
1227
+ #if defined(__INTEL_PREVIEW_BREAKING_CHANGES)
1228
+ return Ret.template as <vec<OpNotRet<T>, N>>();
1229
+ #else
1211
1230
return Ret;
1231
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
1212
1232
}
1213
1233
#else
1214
1234
template <typename T = DataT, int N = NumElements>
1215
- EnableIfUsingArray<vec<T , N>> operator !() const {
1235
+ EnableIfUsingArray<vec<OpNotRet<T> , N>> operator !() const {
1216
1236
vec Ret{};
1217
1237
for (size_t I = 0 ; I < NumElements; ++I)
1218
1238
Ret.setValue (I, !vec_data<DataT>::get (getValue (I)));
1239
+ #if defined(__INTEL_PREVIEW_BREAKING_CHANGES)
1240
+ return Ret.template as <vec<OpNotRet<T>, N>>();
1241
+ #else
1219
1242
return Ret;
1243
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
1220
1244
}
1221
1245
#endif
1222
1246
0 commit comments