Mengapakah GCC Menolak Pengkhususan Eksplisit di Luar Ruang Nama?

DDD
Lepaskan: 2024-11-18 22:57:02
asal
121 orang telah melayarinya

Why Does GCC Reject Explicit Specialization Outside of a Namespace?

Ketidakkonsistenan GCC dengan Standard untuk Pengkhususan Eksplisit dalam Skop Bukan Ruang Nama

Piawaian C secara eksplisit membenarkan pengkhususan templat eksplisit diisytiharkan dalam sebarang skop di mana templat utama yang sepadan boleh ditakrifkan. Walau bagaimanapun, tingkah laku GCC menyimpang daripada piawaian ini. Percanggahan ini telah diperhatikan dalam versi terkini GCC, di mana pengkhususan eksplisit yang diisytiharkan di luar ruang nama gagal dihimpun.

Untuk menggambarkan isu ini, pertimbangkan kod berikut:

template<typename T>
struct Widget
{
    template<typename U>
    void foo(U)
    {
    }

    template<>
    void foo(int*)
    {
    }
};
Salin selepas log masuk

Sementara ini kod berjaya disusun dalam Clang, ia menghadapi ralat dalam GCC:

error: explicit specialization in non-namespace scope 'struct Widget<T>'
Salin selepas log masuk

Ralat ini tidak konsisten dengan standard C, yang secara eksplisit membenarkan pengkhususan eksplisit dalam skop bukan ruang nama. Menurut perenggan 2 [temp.expl.spec] dalam piawaian C:

"Pengkhususan eksplisit boleh diisytiharkan dalam mana-mana skop di mana templat utama yang sepadan boleh ditakrifkan."

Sisihan daripada piawai ini membentuk pepijat yang berpotensi dalam GCC. Untuk melaporkan isu ini, ikut langkah berikut:

  1. Lawati tapak web penjejak pepijat GCC: https://gcc.gnu.org/bugzilla/
  2. Klik pada "Buat Laporan Baharu"
  3. Pilih "Pemegang Tugasan Pepijat" daripada menu "Serahkan Laporan Baharu"
  4. Huraikan isu dengan jelas, termasuk coretan kod, mesej ralat dan rujukan kepada bahagian standard C yang berkaitan ([temp.expl.spec]).
  5. Serahkan laporan dan berikan sebarang maklumat yang berkaitan, seperti versi GCC dan pilihan pengkompil sedang digunakan.

Dengan melaporkan isu ini, anda boleh menyumbang kepada penambahbaikan GCC dan memastikan ia mematuhi sepenuhnya C standard.

Atas ialah kandungan terperinci Mengapakah GCC Menolak Pengkhususan Eksplisit di Luar Ruang Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan