MSVC 16.6 dalam mode C++20 menghapus result_of yang telah dihapus dalam standar C++20. Saya setuju untuk melakukan hal yang benar secara moral, tetapi banyak perpustakaan pihak ketiga(contoh) Saya menggunakan gagal.

Terkadang MSVC memungkinkan pengguna untuk menentukan definisi sehingga fitur yang dihapus tetap diaktifkan. Apakah ada opsi untuk melakukan itu untuk result_of? Saya telah mencoba _HAS_FEATURES_REMOVED_IN_CXX20 dan tampaknya berhasil, tetapi fakta bahwa makro dimulai dengan _ membuat saya takut, ini menunjukkan bahwa itu mungkin mekanisme MSVC internal dan bukan sesuatu yang harus diatur pengguna.

3
NoSenseEtAl 24 Mei 2020, 01:35

1 menjawab

Jawaban Terbaik

Menentukan _HAS_DEPRECATED_RESULT_OF dan _SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING harus memulihkan result_of secara lebih terperinci dan menonaktifkan peringatan penghentiannya.

_HAS_FEATURES_REMOVED_IN_CXX20 dan _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS harus melakukan hal yang sama untuk semua fitur C++17 yang dihentikan di C++20.

Mengingat sejarah masa lalu, "penggantian penghentian" ini seharusnya relatif aman untuk digunakan sekarang dan untuk beberapa waktu mendatang. Di bawah ini adalah kutipan lama (tentang VS 2017) dari blog yang disetujui MS< /a>.

5. (Penting!) Kemungkinan besar Anda akan menemukan perubahan pemecah sumber di perpustakaan pihak ketiga yang tidak dapat Anda ubah (dengan mudah atau sama sekali). Kami mencoba memberikan jalan keluar sehingga Anda dapat memulihkan fitur yang dihapus atau membungkam peringatan penghentian dan melanjutkan pekerjaan Anda, tetapi pertama-tama, harap laporkan masalah tersebut ke pengelola perpustakaan yang relevan. Dengan membantu mereka memperbarui kode mereka, Anda akan membantu lebih banyak programmer C++ seperti Anda.

5
dxiv 24 Mei 2020, 04:20