-
Notifications
You must be signed in to change notification settings - Fork 279
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
basic conversion to C++20 #2645
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2645 +/- ##
==========================================
+ Coverage 64.62% 64.65% +0.02%
==========================================
Files 104 104
Lines 22239 22235 -4
Branches 10911 10909 -2
==========================================
+ Hits 14371 14375 +4
+ Misses 5626 5622 -4
+ Partials 2242 2238 -4 ☔ View full report in Codecov by Sentry. |
e68ae8a
to
4cddaa6
Compare
Hrm I’m unsure of this PR. Compiler minimums have to increase for everything. |
011b5e9
to
84e45a3
Compare
For library code it is usually good to use newer standards only in the implementation, but not in the interface. However I do not know how to map this in Windows or whenever something links to features you need a newer standard C++/template library because then people still need to upgrade. So the safe way would be to make the library stuff compatible from whatever minimum C++ standard version is desired (11/14/17) but pushing all users to C++20 might make exiv2 unsuitable for many of those who use it today. |
Right. The headers are still kept at C++11. On that note, if constexpr should be removed from them as compilers are not free to add it implicitly as I originally thought, making the templates much less efficient. As far as Windows is concerned, that's not an issue. In the case of MSVC, the libraries are upgrade-able, I actually don't know if older MSVC can even compile exiv2. I remember MSVC2019 or something just crashing when trying to compile exiv2. No errors printed. On that note, there's currently an issue where Exiv2 is incompatible with msvcrt. Given that it's deprecated by Microsoft, I see no value in supporting it. See #2637 |
9c58408
to
676aac1
Compare
Btw, might be an idea to hold off on this for a couple of 0.28.x bugfix releases, just so it remains easy to backport stuff from the main branch? |
This is still draft after all. |
21cbd59
to
959b4df
Compare
Yeah I'm not sure of this PR anymore. People are still using GCC7 to compile Exiv2. std::endian comes with GCC8 and starts_with GCC9. Let's not mention other projects that are on C++14 to allow building with CentOS7. This is going to be a draft for a while.... |
Signed-off-by: Rosen Penev <[email protected]>
18.04 is now EOL. 20.04 comes with 9 standard. Allows building with C++20. Signed-off-by: Rosen Penev <[email protected]>
Signed-off-by: Rosen Penev <[email protected]>
There's std::endian now. Signed-off-by: Rosen Penev <[email protected]>
template <size_t N, const char* const (&keys)[N]> | ||
ExifData::const_iterator findMetadatum(const ExifData& ed) { | ||
for (const auto& k : keys) { | ||
auto pos = ed.findKey(ExifKey(k)); |
Check warning
Code scanning / CodeQL
NULL iterator deref Warning
here
Iterator returned by findKey might cause a null deref
No description provided.