Skip to content
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

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from
Draft

basic conversion to C++20 #2645

wants to merge 4 commits into from

Conversation

neheb
Copy link
Collaborator

@neheb neheb commented Jun 5, 2023

No description provided.

@ghost
Copy link

ghost commented Jun 5, 2023

👇 Click on the image for a new way to code review

Review these changes using an interactive CodeSee Map

Legend

CodeSee Map legend

@codecov
Copy link

codecov bot commented Jun 5, 2023

Codecov Report

Attention: Patch coverage is 69.23077% with 28 lines in your changes are missing coverage. Please review.

Project coverage is 64.65%. Comparing base (77915ad) to head (67699ce).
Report is 11 commits behind head on main.

Files Patch % Lines
src/epsimage.cpp 0.00% 17 Missing ⚠️
src/sonymn_int.cpp 73.68% 0 Missing and 5 partials ⚠️
src/pentaxmn_int.cpp 0.00% 0 Missing and 4 partials ⚠️
src/pgfimage.cpp 80.00% 1 Missing ⚠️
src/tiffcomposite_int.cpp 0.00% 1 Missing ⚠️
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.
📢 Have feedback on the report? Share it here.

@neheb neheb force-pushed the h branch 3 times, most recently from e68ae8a to 4cddaa6 Compare June 6, 2023 11:20
@neheb
Copy link
Collaborator Author

neheb commented Jun 7, 2023

Hrm I’m unsure of this PR. Compiler minimums have to increase for everything.

@mandree
Copy link
Contributor

mandree commented Jul 1, 2023

Hrm I’m unsure of this PR. Compiler minimums have to increase for everything.

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.

@neheb
Copy link
Collaborator Author

neheb commented Jul 1, 2023

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

@kmilos
Copy link
Collaborator

kmilos commented Jul 13, 2023

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?

@neheb
Copy link
Collaborator Author

neheb commented Jul 13, 2023

This is still draft after all.

@neheb
Copy link
Collaborator Author

neheb commented Jul 19, 2023

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....

neheb added 3 commits May 15, 2024 15:25
Signed-off-by: Rosen Penev <rosenp@gmail.com>
18.04 is now EOL. 20.04 comes with 9 standard. Allows building with
C++20.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Signed-off-by: Rosen Penev <rosenp@gmail.com>
There's std::endian now.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
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

Iterator returned by findKey might cause a null deref
here
.
Iterator returned by findKey might cause a null deref
here
.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants