Fix for iterators with const-qualified value type #1527
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Iterator inputs to parallel APIs with a device policy which have a const-qualified value type are experiencing build errors on with MSVC or GCC standard library implementation because of static assertions in the class definition for std::vector.
Our check for USM allocated vector iterators checks all input iterators, and within the check, instantiates a
std::vector
with a value type which matches the input iterator's value type. Prior to this PR, we do not protect against "ill formed" vector instantiations, like const-qualified, reference, or function types. When the value type of the input iterator are any of these, the build hitsstd::vector
static assertions while attempting to determine if the iterator is a USM allocator std::vector iterator.This bug was introduced in #1438.
This PR adds a short circuit to avoid such ill-formed std::vector instantiations for specific value types (reference, const, and function types). These will not be USM allocated std::vector iterators, so it should not effect our ability to detect those types.
This fixes the bug reproducer as reported. I have also confirmed that input data processing still works as intended using #1429.