Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix 1-element "vec" ambiguities #670

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

gmlueck
Copy link
Contributor

@gmlueck gmlueck commented Dec 3, 2024

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.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant