/Zc:noexceptTypes
(Aturan noexcept C++17)
Standar C++17 membuat throw()
alias untuk noexcept
, menghapus throw(
type-list
)
dan throw(...)
, dan memungkinkan jenis tertentu untuk menyertakan noexcept
. Perubahan ini dapat menyebabkan sejumlah masalah kompatibilitas sumber dalam kode yang sesuai dengan C++14 atau yang lebih lama. Opsi /Zc:noexceptTypes
menentukan kesuaian dengan standar C++17. /Zc:noexceptTypes-
memungkinkan perilaku C++14 dan yang lebih lama ketika kode dikompilasi dalam mode C++17.
Sintaks
/Zc:noexceptTypes
[-
]
Keterangan
/Zc:noexceptTypes
Ketika opsi ditentukan, pengkompilasi sesuai dengan standar C++17 dan memperlakukan throw()
sebagai alias untuk noexcept
, menghapus throw(
)
type-list
dan throw(...)
, dan memungkinkan jenis tertentu untuk menyertakan .noexcept
Opsi /Zc:noexceptTypes
ini hanya tersedia ketika /std:c++17
atau yang lebih baru diaktifkan. /Zc:noexceptTypes
diaktifkan secara default agar sesuai dengan standar ISO C++17 dan yang lebih baru. Opsi /permissive-
tidak memengaruhi /Zc:noexceptTypes
. Nonaktifkan opsi ini dengan menentukan /Zc:noexceptTypes-
untuk kembali ke perilaku C++14 kapan noexcept
/std:c++17
atau yang lebih baru ditentukan.
Dimulai di Visual Studio 2017 versi 15.5, pengkompilasi C++ mendiagnosis spesifikasi pengecualian yang lebih tidak cocok dalam deklarasi dalam mode C++17, atau saat Anda menentukan /permissive-
opsi.
Sampel ini menunjukkan bagaimana deklarasi dengan penentu pengecualian berperilaku saat /Zc:noexceptTypes
opsi diatur atau dinonaktifkan. Untuk menampilkan perilaku saat diatur, kompilasi dengan menggunakan cl /EHsc /W4 noexceptTypes.cpp
. Untuk menampilkan perilaku saat dinonaktifkan, kompilasi dengan menggunakan cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp
.
// noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 noexceptTypes.cpp
// Compile by using: cl /EHsc /W4 /Zc:noexceptTypes- noexceptTypes.cpp
void f() throw(); // equivalent to void f() noexcept;
void f() { } // warning C5043
void g() throw(...); // warning C5040
struct A
{
virtual void f() throw();
};
struct B : A
{
virtual void f() { } // error C2694
};
Saat dikompilasi dengan menggunakan pengaturan /Zc:noexceptTypes
default , sampel menghasilkan peringatan yang tercantum. Untuk memperbarui kode Anda, gunakan yang berikut:
void f() noexcept;
void f() noexcept { }
void g() noexcept(false);
struct A
{
virtual void f() noexcept;
};
struct B : A
{
virtual void f() noexcept { }
};
Untuk informasi selengkapnya tentang masalah kesuaian di Visual C++, lihat Perilaku Nonstandar.
Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.
Ubah properti Opsi Tambahan untuk disertakan
/Zc:noexceptTypes
atau/Zc:noexceptTypes-
lalu pilih OK.