Split `point_types.hpp` part into `field_traits.(h|hpp)`
- Move
(H|h)as_traits frompoint_types.hppintofield_traits.(h|hpp) - Add
field_traits.hinclude where field traits are used - Change a MSVC compiler warning reset via
#pragma warning((push|pop)) - Add
field_traits.hinclude inpoint_types.hfor backward compatibility - Remove unnecessary
pcl/point_types.hincludes in some files - Add missing
pcl/point_types.hincludes in some files - Add missing
cstringinclude inpcl/common/impl/copy_point.hpp
Also may fix https://github.com/PointCloudLibrary/pcl/issues/5040
Based on https://github.com/PointCloudLibrary/pcl/pull/6367
I will try to build manually with PCL_OPTIMIZE_IMPORTS_FIELD_TRAITS. Maybe additional pipelines can be considered.
Edit: Compilation finished successfully.
For a moment I thought I was going under some water here... Phew, it was close! Excuse me for informality. As the pipelines are passing it seems that we are good to go (or maybe not, because there are still some files for which it would be nice to add missing includes, but they can be added in other PRs, possibly)
I tried it on windows yesterday and noticed a lot of: no suitable definition provided for explicit template instantiation request.
See windows ci: https://dev.azure.com/PointCloudLibrary/pcl/_build/results?buildId=25918&view=logs&j=b7dd6ba8-1ad9-5018-2280-3f36c72607c9&t=2fd7de77-c8c6-5479-ec09-1c18859bcc95&l=61
I haven't quite figured out why its not provided, but we should look into it before merging.
Oh, nice catch! @larshg
As far as I understand these warnings were disabled by pcl/common/include/pcl/pcl_macros.h (link to the latest commit in master at the moment - search for "4661").
pcl/common/include/pcl/pcl_macros.h is included by pcl/common/include/pcl/impl/point_types.hpp which is included by pcl/common/include/pcl/point_types.h.
But pcl/common/include/pcl/pcl_macros.h is not included by pcl/common/include/pcl/field_traits.h.
Therefore, in the translation units where pcl/common/include/pcl/pcl_macros.h is not included (for example: where I replaced pcl/common/include/pcl/point_types.h with pcl/common/include/pcl/field_traits.h and pcl/common/include/pcl/pcl_macros.h did not get to be included) these warnings are not disabled.
Ahh, yes. And it doesn't seem to be worth looking into fixing that warning, so we just need to include pcl_macros.h accordingly?
Hmm. Disabling warnings in a header file (without returning to the state before the disabling) will affect warnings in user code which includes (directly or transitively) that header. Would it not be better to disable project scope warnings using a build system (in our case CMake)?