skramm/homog2d

Compatibility with c++17

DJuego opened this issue ยท 15 comments

Today I officially start working in earnest with your great contribution, again thank you very much for this @skramm! ๐Ÿ˜˜

But I've hit the first hurdle. Due to my other dependencies I need to work with C++17. However your library seems to have incompatibilities in this regard.

I am working with Visual Studio 2019 (Windows 10 x64).

When I try to build your "short preview" with the C++17 configuration I get the following errors.

>main.cpp
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(407,1): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(417,1): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): error C2244: 'h2d::Circle_<FPT1>::intersects': unable to match function definition to an existing declaration
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4573): message : see declaration of 'h2d::Circle_<FPT1>::intersects'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : definition
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_2,FPT> h2d::Circle_<FPT1>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : existing declarations
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : 'h2d::detail::IntersectM<FPT> h2d::Circle_<FPT1>::intersects(const h2d::base::PolylineBase<PLT2,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : 'h2d::detail::IntersectM<FPT> h2d::Circle_<FPT1>::intersects(const h2d::FRect_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_2,FPT> h2d::Circle_<FPT1>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : 'h2d::detail::IntersectM<FPT> h2d::Circle_<FPT1>::intersects(const h2d::Segment_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4574,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_2,FPT> h2d::Circle_<FPT1>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): error C2244: 'h2d::Segment_<FPT>::intersects': unable to match function definition to an existing declaration
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6435): message : see declaration of 'h2d::Segment_<FPT>::intersects'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : definition
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::Segment_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : existing declarations
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::base::PolylineBase<PLT2,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::FRect_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6436,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::Segment_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): error C2244: 'h2d::Segment_<FPT>::intersects': unable to match function definition to an existing declaration
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6474): message : see declaration of 'h2d::Segment_<FPT>::intersects'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : definition
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : existing declarations
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::base::PolylineBase<PLT2,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::FRect_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6475,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::Segment_<FPT2> &) const'
1>Done building project "geometria_msvc2019.vcxproj" -- FAILED.

With the C++14 configuration however the same code seems to go smoothly, but it is not convenient for me due to my other dependencies. Is it possible to solve it? ๐Ÿ˜ง

Thanks!!

DJuego

Thanks for your feedback. Yes, I did not test with c++17 so your feedback is very useful.
I'll check that ASAP and report.

Sorry, I'd like to investigate, but I can't reproduce: having no Windows machine, I can't try it directly, the only way for me to test MSVC is to use Golbolt CE. So I tried by adding the c++17 flag (/std:c++17 )
See https://godbolt.org/z/76nx7dv74
And the build succeeds.
Could you tell me the version you are building? Doesn't look like current master, from line numbers.

Just tried on dev machine (Ubuntu 20.04, gcc 9.4) by replacing -std=c++14 by -std=c++17 in the makefile: everything seems fine (test and demo)...
Could you give me some details? Maybe some option in VS?

Thank you for your efforts!! ๐Ÿ˜˜ It's really important to me. I'm really looking forward to working with your contribution.

To make sure I just updated to master, and I try to compile in Visual Studio 2019 the "short preview". I can confirm that this problem also occurs in Visual Studio 2022.

With std=c++14 everything works like a charm. ๐Ÿ‘

With std=c++17 I get the following error log:

Build started...
1>------ Build started: Project: geometria_msvc2019, Configuration: Debug x64 ------
1>main.cpp
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): error C2244: 'h2d::Circle_<FPT1>::intersects': unable to match function definition to an existing declaration
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4570): message : see declaration of 'h2d::Circle_<FPT1>::intersects'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : definition
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_2,FPT> h2d::Circle_<FPT1>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : existing declarations
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : 'h2d::detail::IntersectM<FPT> h2d::Circle_<FPT1>::intersects(const h2d::base::PolylineBase<PLT2,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : 'h2d::detail::IntersectM<FPT> h2d::Circle_<FPT1>::intersects(const h2d::FRect_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_2,FPT> h2d::Circle_<FPT1>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : 'h2d::detail::IntersectM<FPT> h2d::Circle_<FPT1>::intersects(const h2d::Segment_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(4571,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_2,FPT> h2d::Circle_<FPT1>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): error C2244: 'h2d::Segment_<FPT>::intersects': unable to match function definition to an existing declaration
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6433): message : see declaration of 'h2d::Segment_<FPT>::intersects'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : definition
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::Segment_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : existing declarations
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::base::PolylineBase<PLT2,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::FRect_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6434,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::Segment_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): error C2244: 'h2d::Segment_<FPT>::intersects': unable to match function definition to an existing declaration
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6472): message : see declaration of 'h2d::Segment_<FPT>::intersects'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : definition
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : existing declarations
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::base::PolylineBase<PLT2,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::FRect_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : 'h2d::detail::IntersectM<FPT> h2d::Segment_<FPT>::intersects(const h2d::Circle_<FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::base::LPBase<h2d::type::IsLine,FPT2> &) const'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\Geometria\inc\homog2d\homog2d.hpp(6473,1): message : 'h2d::detail::Intersect<h2d::detail::Inters_1,FPT> h2d::Segment_<FPT>::intersects(const h2d::Segment_<FPT2> &) const'
1>Done building project "geometria_msvc2019.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

DJuego
homog2d gif

News!!

As you suggested, I have been playing in isolation and systematically other Visual Studio options (Warning Level, SDL Checks, etc) combining them with -std=c++17 and I have found the problematic option!

Conformance Mode

With -std=c++17:

Conformance Mode: Yes (/permisive-) ->Compilation errors are produced
Conformance Mode: No (/permisive) -> Successful compilation.

DJuego

homog2d_2 gif

ok, thanks. Managed to reproduce the issue:
https://godbolt.org/z/695r98j9n

I'll need some time to get into this, in the meanwhile , I'd suggest you disable that option.
I'll get back here once I have some insights.

Managed to cleanout spurious errors, at present only for C++14 with the /permissive- flag for msvc 19.33:
https://godbolt.org/z/vr4bY7EK1
I solved by adding some requested typename, strange, I didn't think these were necessary...
For C++17, still some fixes required.

This issue could be a msvc bug. I just filed an issue on their tracker, with a MNBE (Minimal Non Building Example ;-) ), lets wait for their feedback.
https://developercommunity.visualstudio.com/t/Build-failure-when-both-c17-and-perm/10267867

Live demo: https://godbolt.org/z/PGejh44YE

Fixed ! Was a stupid error of mine (see above VS link....)

I fixed master, see https://godbolt.org/z/695r98j9n

Could you please checkout on master and see if its ok for you, so I can close the issue?

And thanks again, for reporting, code always get better with feedback!

๐ŸŽ‰ It works!!! ๐ŸŽ‰

At least the minimal example with Visual Studio 2019 (/permissive- /std:c++17) Congratulations!!
I will try in Visual Studio 2022 later, but it would be surprising if the result is different. :-D

Now, having overcome this problem, another problem has arisen with your library. :-O

But this time, it happens inside my code. And it happens only with the /permissive- option. (with /std: c++17)

Right now I'm not doing anything (yet :-) with the library. Just #include <homog2d/homog2d.hpp>.

The error is:

1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(1453,35): error C3861: 'M_PI': identifier not found
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(1590,10): error C3861: 'M_PI': identifier not found
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(1706): message : see reference to class template instantiation 'h2d::Ellipse_<FPT>' being compiled
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(2478,61): error C3861: 'M_PI': identifier not found
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(2662): message : see reference to class template instantiation 'h2d::Circle_<FPT1>' being compiled
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(2482,51): error C3861: 'M_PI': identifier not found
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(6845,27): error C3861: 'M_PI': identifier not found
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(9651,45): error C3861: 'M_PI': identifier not found
1>Escenario.cpp

However it does NOT happen with the preview example so it must be a problem on my end. Maybe some incompatibility with something else I include.

I have already noticed that you do:

#define _USE_MATH_DEFINES
#include <cmath>

That's why I have no idea what might be happening....
I will look into it over the next few days and keep you posted.

Thank you so much for your efforts in solving this problem! ๐Ÿ’Œ

DJuego

There's indeed a problem with M_PI and C++17:
https://stackoverflow.com/a/49778493/193789

But its a strange issue, because this:
https://godbolt.org/z/YjTvEdWaW
seems to be ok, with msvc.

According to this:
https://stackoverflow.com/a/6563891/193789
it "could" be sufficient to move the include... but it is already on top!

I added this:

#define _USE_MATH_DEFINES
#include <cmath>

#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif

Could you pull master and check if this does the fix? And let me know?

Yes!!

Now it compiles perfectly in Visual Studio 2019... ๐Ÿ˜ but when I use the last master to Visual Studio 2022.... I get new errors!!!

I think its compliance (conformance) check becomes stricter...:grimacing:

LogicaGeometrica.cpp
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(412,1): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(422,1): warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(9282,68): error C2275: 'h2d::type::IsPoint': expected an expression instead of a type
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(9282,51): error C2923: 'h2d::detail::BaseHelper': 'h2d::type::IsPoint' is not a valid template type argument for parameter '<unnamed-symbol>'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(9282,68): message : see declaration of 'h2d::type::IsPoint'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(9282,1): error C2955: 'h2d::detail::BaseHelper': use of class template requires template argument list
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(210,21): message : see declaration of 'h2d::detail::BaseHelper'
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(9282,37): error C2955: 'h2d::detail::BaseHelper': use of class template requires template argument list
1>P:\Mis-Proyectos\Profesional\Ciberlandia\TrackGPS\inc\homog2d\homog2d.hpp(210,21): message : see declaration of 'h2d::detail::BaseHelper'

Anyway these are errors that occur when I include your header in my code. I haven't tested in Visual Studio 2022 with a minimal example, but it doesn't seem to have anything to do with it.

However, I will prepare a minimal test (with your preview code) in a few hours.

DJuego

Sorry, for the inconveniency. funny, that didn't happen with CE.
Easy fix, just as the previous I think, needed a "typename". I hope I didn't forget any.
Just pushed on master.
Thanks for checking out, and let me know, I hope it's all fine now.

Indeed! It is with great joy and satisfaction that I confirm that, at least for the moment, I will not bother you any more with this matter. ๐Ÿ’– It builds in Visual Studio 2019/2022 with /std:c++17 and /permissive-!

Everything seems to be running smoothly. Of course, I haven't really started using your library yet. I have only included it in the project and focused on other things while waiting for this issue to be clarified.

This weekend I plan to delve into the wonders your work has to offer.

You can close this thread with pride. ๐Ÿ˜

DJuego

Great!
Don't hesitate to open another issue, even not a build failure, but say, for a clarification on the manual/usage, or whatever.
That is always helpful to improve things.