weidai11 / cryptopp

free C++ class library of cryptographic schemes
https://cryptopp.com
Other
4.66k stars 1.47k forks source link

Compile warnings in VS 2022 17.8.0 - stdext::make_checked_array_iterator stdext::make_unchecked_array_iterator beeing deprecated #1250

Open JanFellner opened 7 months ago

JanFellner commented 7 months ago

I`m seeing compiler warnings since the latest VS 2022 update (17.8.0) on Windows 11 with the latest cryptopp 8.9

`17:30:31:685 1>X:\cryptopp\integer.cpp(3061,12): warning C4996: 'stdext::make_checked_array_iterator': warning STL4043: stdext::checked_array_iterator, stdext::unchecked_array_iterator, and related factory functions are non-Standard extensions and will be removed in the future. std::span (since C++20) and gsl::span can be used instead. You can define _SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING or _SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS to suppress this warning. 17:30:31:685 1>(compiling source file '/integer.cpp')

17:30:32:401 1>X:\cryptopp\zdeflate.cpp(422,155): warning C4996: 'stdext::unchecked_array_iterator<const CryptoPP::byte *>::operator -': warning STL4043: stdext::checked_array_iterator, stdext::unchecked_array_iterator, and related factory functions are non-Standard extensions and will be removed in the future. std::span (since C++20) and gsl::span can be used instead. You can define _SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING or _SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS to suppress this warning. `

It appears loosen from the platformSDK and loosen from the C++ standard

Tried PlatformSDK:

C++ Language standard:

irwir commented 5 months ago

The lazy way of handling the issue was disabled warnings, but this works only while extensions were not removed completely.

The string stdext:: was found only in two files in the library, and all usages were deprecated. Brief look at the code of those Microsoft's extensions reveals only ordinary things: see if it was a pointer type, non-null and not beyond the bounds. This kind of checks in most cases could be made in the code or even were unnecessary. Some people just removed these long names and used standard pointers or iterators. Cryptopp library might follow suit, and thus simplify the code. Alternatively, use of extensions could be restricted to non-deprecating versions of compiler and C++ standards.