Bagikan melalui


Compiler Warning C4984

'if constexpr' adalah ekstensi bahasa C++17

Keterangan

Pengkompilasi menemukan ekspresi dalam kode yang if constexpr dikompilasi dengan menggunakan standar C++14 default. Ekspresi ini ditentukan mulai dari standar C++17. Jika Anda memerlukan kompatibilitas C++11 atau C++14, ekspresi ini tidak portabel.

C4984 dikeluarkan sebagai kesalahan secara default, tetapi dapat ditekan. Untuk mengaktifkan ekspresi ini dengan mengkompilasi kode Anda sebagai C++17, gunakan /std:c++17 mode atau yang lebih baru. Untuk menggunakan ekspresi dalam kode yang if constexpr dikompilasi untuk C++14 sebagai ekstensi Microsoft, Anda dapat menekan, menonaktifkan, atau mengubah tingkat peringatan pesan kesalahan. Anda dapat menggunakan /wd4984 untuk menonaktifkan C4984, atau /wN4984 untuk mengaktifkannya sebagai peringatan tingkat N alih-alih kesalahan. Atau, gunakan #pragma warning(suppress:4984) sebelum baris yang menyebabkan peringatan dalam file sumber Anda.

Peringatan ini tersedia mulai di Visual Studio 2017 versi 15.3. Untuk informasi tentang cara menonaktifkan peringatan yang diperkenalkan dalam versi kompilator tertentu atau yang lebih baru, lihat Compiler Warnings berdasarkan versi kompilator.

Contoh

Sampel ini menghasilkan C4984, dan menunjukkan cara untuk memperbaikinya:

// C4984.cpp
// compile with: cl /EHsc C4984.cpp
#include <iostream>

int main()
{
    constexpr bool compile_time = true;
    // Uncomment the following line or use /std:c++17 to fix
    // #pragma warning(suppress:4984)
    if constexpr (compile_time)
    {
        std::cout << "compile_time is true";
    }
    else
    {
        std::cout << "compile_time is false";
    }
}