Skip to content

Commit

Permalink
Fix 1-element "vec" ambiguities
Browse files Browse the repository at this point in the history
This is change 3 of 9 that fix problems with the specification of the
`vec` class.  An implementation that follows the existing specification
would not accept common code patterns and would not pass the CTS.  None
of the existing implementations actually follow the existing
specification.

This change fixes an ambiguity that occurs for all of the binary
operators when one of the operands is a 1-element `vec` and the other
operand is a scalar that is not `DataT` but is convertible to `DataT`.
For example:

```
sycl::vec<float, 1> v;
v + 2;
```

Prior to this change, this would result in an ambiguity error from the
compiler between:

* Convert 2 -> `float`, call `operator+(const vec&, const DataT&)`
* Convert `vec<float, 1>` -> `float`, call `operator+(float, int)`

After this change, the code snippet above compiles without error,
calling `operator+(const vec&, const int&)` that is instantiated from a
template.

These changes correspond to slides 10 - 13 of the presentation that was
discussed in the WG meetings.
  • Loading branch information
gmlueck committed Dec 2, 2024
1 parent 94eb558 commit 8bd4791
Show file tree
Hide file tree
Showing 2 changed files with 201 additions and 85 deletions.
Loading

0 comments on commit 8bd4791

Please sign in to comment.