boostorg / container

STL-like containers from Boost
http://www.boost.org/libs/container/
Boost Software License 1.0
96 stars 116 forks source link

Some boost warnings with my R package #209

Closed stla closed 1 year ago

stla commented 2 years ago

Hello,

I'm currently making a R package which uses some C++ libraries, including boost and CGAL.

I don't get any problem on Linux. But when I run R CMD CHECK to check my package on Windows, I get these warnings:

* checking whether package 'RCGAL' can be installed ... WARNING
Found the following significant warnings:
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:184:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'value_type' {aka 'struct std::pair<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > > > >, CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > > > > >'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:214:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'boost::movelib::detail::iterator_to_element_ptr<std::pair<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > > > >, CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > > > > >*>::element_type' {aka 'struct std::pair<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > > > >, CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > >, std::allocator<CGAL::HalfedgeDS_in_place_list_halfedge<CGAL::I_Polyhedron_halfedge<CGAL::HalfedgeDS_halfedge_max_base_with_id<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_with_id_3>, std::allocator<int> >, long long unsigned int> > > > > >'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:184:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'value_type' {aka 'struct std::pair<CGAL::SM_Halfedge_index, CGAL::SM_Halfedge_index>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:214:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'boost::movelib::detail::iterator_to_element_ptr<std::pair<CGAL::SM_Halfedge_index, CGAL::SM_Halfedge_index>*>::element_type' {aka 'struct std::pair<CGAL::SM_Halfedge_index, CGAL::SM_Halfedge_index>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:184:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'value_type' {aka 'struct std::pair<CGAL::internal::CC_iterator<CGAL::Compact_container<CGAL::Advancing_front_surface_reconstruction_cell_base_3<CGAL::Epick, CGAL::Delaunay_triangulation_cell_base_3<CGAL::Epick, CGAL::Triangulation_cell_base_3<CGAL::Epick, CGAL::Triangulation_ds_cell_base_3<CGAL::Triangulation_data_structure_3<CGAL::Advancing_front_surface_reconstruction_vertex_base_3<CGAL::Epick>, CGAL::Advancing_front_surface_reconstruction_cell_base_3<CGAL::Epick> > > > > >, CGAL::Default, CGAL::Default, CGAL::Default>, false>, int>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:184:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'value_type' {aka 'struct std::pair<CGAL::internal::CC_iterator<CGAL::Compact_container<CGAL::Triangulation_ds_cell_base_3<CGAL::Triangulation_data_structure_3<CGAL::Triangulation_vertex_base_with_info_3<unsigned int, CGAL::Epick> > >, CGAL::Default, CGAL::Default, CGAL::Default>, false>, int>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:184:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'value_type' {aka 'struct std::pair<CGAL::internal::CC_iterator<CGAL::Compact_container<CGAL::Delaunay_triangulation_cell_base_3<CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_cell_base_with_info_3<int, CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_cell_base_3<CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_ds_cell_base_3<CGAL::Triangulation_data_structure_3<CGAL::Reconstruction_vertex_base_3<CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_vertex_base_3<CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_ds_vertex_base_3<void> > >, CGAL::Delaunay_triangulation_cell_base_3<CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_cell_base_with_info_3<int, CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_cell_base_3<CGAL::Reconstruction_triangulation_default_geom_traits_3<CGAL::Robust_circumcenter_filtered_traits_3<CGAL::Epick> >, CGAL::Triangulation_ds_cell_base_3<void> > > >, CGAL::Sequential_tag> > > > >, CGAL::Default, CGAL::Default, CGAL::Default>, false>, int>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
  C:/PortableApps/R/R-4.1.2/App/R-Portable/library/BH/include/boost/container/detail/copy_move_algo.hpp:184:19: warning: 'void* memmove(void*, const void*, size_t)' writing to an object of type 'value_type' {aka 'struct std::pair<CGAL::internal::CC_iterator<CGAL::Compact_container<CGAL::Delaunay_triangulation_cell_base_with_circumcenter_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Surface_mesh_cell_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Delaunay_triangulation_cell_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Triangulation_cell_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Triangulation_ds_cell_base_3<CGAL::Triangulation_data_structure_3<CGAL::Surface_mesh_vertex_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Triangulation_vertex_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Triangulation_ds_vertex_base_3<void> > >, CGAL::Delaunay_triangulation_cell_base_with_circumcenter_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Surface_mesh_cell_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Delaunay_triangulation_cell_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Triangulation_cell_base_3<CGAL::Robust_circumcenter_traits_3<CGAL::Epick>, CGAL::Triangulation_ds_cell_base_3<void> > > > >, CGAL::Sequential_tag> > > > > >, CGAL::Default, CGAL::Default, CGAL::Default>, false>, int>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
See 'C:/SL/MyPackages/RCGAL.Rcheck/00install.out' for details.

Do you know what are these warnings, and how can I get rid of them? CRAN (the R packages repository) will not accept my package if there are these warnings.

Cheers.

igaztanaga commented 1 year ago

Many thanks for the report!

mglisse commented 9 months ago

@igaztanaga Your changes here essentially revert what you did some years ago for #73 (though I don't know why you kept a partial specialization of is_trivially_copy_assignable and others if they are always going to be false), so the performance gains from that time disappeared, see #248. 62a8b6666eb0f12242fb1e99daa98533ce74e735 was supposed to disable the warnings, maybe the pragma just needed some tweaks, or you could have added some (void*) casts in the code or something? At least a heads-up, reopening #73, would have been nice.