[SYCL] Make sub_group a class instead of a struct (#23104)
SYCL 2020 section 4.9.1.8 declares `sub_group` as a class. This switches
the definition and the forward declarations of `sycl::sub_group` from
`struct` to `class`, with an explicit `public:` so the interface is
unchanged.
Forward declarations had to be updated together with the definition,
otherwise the mismatched tag triggers `-Wmismatched-tags` (and MSVC
C4099).
The deprecated `sycl::ext::oneapi::sub_group` is left as a `struct` — it
is a separate type, and keeping it a struct preserves its public
inheritance from `sycl::sub_group`.
No functional change: no data members, no accessibility changes, and the
class/struct keyword does not affect mangling or aggregate-ness here.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>