Rumah > Artikel > pembangunan bahagian belakang > Mengapa GCC Gagal Mengumpul Pengkhususan Eksplisit dalam Skop Bukan Ruang Nama?
Walaupun mematuhi piawaian C, yang secara eksplisit membenarkan pengkhususan eksplisit dalam mana-mana skop di mana templat utama boleh ditakrifkan, kod yang disediakan mempamerkan ralat kompilasi dalam GCC tetapi tidak dalam Clang. Percanggahan ini menimbulkan persoalan sama ada ini pepijat dalam GCC dan cara untuk mengesannya dalam penjejak pepijatnya.
Menurut [temp.expl.spec], perenggan 2, "Pengkhususan eksplisit boleh diisytiharkan dalam sebarang skop di mana templat utama yang sepadan boleh ditakrifkan." Walau bagaimanapun, GCC HEAD 8.0.1 dengan -std=c 2a menghasilkan mesej ralat yang menunjukkan bahawa pengkhususan eksplisit tidak dibenarkan dalam skop bukan ruang nama.
Sisihan daripada piawai ini menunjukkan potensi pepijat dalam GCC. Untuk mengesan isu ini dalam penjejak pepijat, seseorang boleh mencari "pengkhususan eksplisit" atau "skop" dalam pangkalan data pepijat GCC. Sebagai alternatif, isu itu boleh dilaporkan terus menggunakan sistem pelaporan pepijat.
Dalam kes ini, isu tersebut telah dilaporkan sebagai Pepijat 85282, yang mengakui masalah dan ketidakselarasannya dengan pindaan CWG 727. Pindaan itu menyemak semula standard untuk membenarkan pengkhususan eksplisit dalam mana-mana skop di mana templat utama boleh ditakrifkan.
Implikasi pepijat ini ialah pengguna GCC mungkin menghadapi masalah kompilasi apabila cuba mengisytiharkan pengkhususan eksplisit di luar skop ruang nama, walaupun piawaian C membenarkan pengisytiharan sedemikian. Untuk mengurangkan isu ini, pengguna boleh sama ada menyasarkan pengkompil bukan GCC atau merangkum pengkhususan eksplisit dalam ruang nama, yang pada masa ini merupakan satu-satunya skop yang serasi dengan tafsiran standard GCC.
Atas ialah kandungan terperinci Mengapa GCC Gagal Mengumpul Pengkhususan Eksplisit dalam Skop Bukan Ruang Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!