DPCT1122#

メッセージ#

テンプレート宣言で ‘<元のタイプ>’ が ‘<移行以後のタイプ>’ に移行されます。テンプレート関数またはクラスの再定義が発生する可能性があります。コードを調整してください。

詳細な説明#

sycl::long4 のような SYCL* ベクトルタイプは、SYCL* 2020 ベクトル・タイプのセクション 4.12.2 で ‘using <type><elems> = vec<<storage-type>, <elems>>’ によって定義されていますが、sycl::longlong4 は定義されていません。移行では、‘long4’ と ‘longlong4’ の両方が sycl::long4 に移行され、これによりテンプレート関数またはクラスの再定義が発生する可能性があります。

修正方法の提案#

例えば、以下のオリジナル CUDA* コードについて考えてみます。

1  template <typename T> struct C { T a; }; 
2  template <> struct C<longlong4> { longlong4 a; }; 
3  template <> struct C<long4> { long4 a; };

このコードは、以下の SYCL* コードに移行されます。

1  template <typename T> struct C { T a; }; 
2  /* 
3  DPCT1122:0: 'longlong4' is migrated to 'sycl::long4' in the template 
4  declaration; it may cause template function or class redefinition; please adjust 
5  the code.
6  */ 
7  template <> struct C<sycl::long4> { sycl::long4 a; }; 
8  template <> struct C<sycl::long4> { sycl::long4 a; };

上記は次のように書き換える必要があります。

1  template <typename T> struct C { T a; }; 
2  template <> struct C<sycl::long4> { sycl::long4 a; };