From cc547d5b0d2b53b2b337b28cb0a7a0c92379ab09 Mon Sep 17 00:00:00 2001 From: Borislav Stanimirov Date: Tue, 2 Sep 2025 09:11:14 +0300 Subject: [PATCH 1/2] fix potential class/struct odr violations --- include/yorel/yomm2/policies/core.hpp | 2 +- include/yorel/yomm2/policy.hpp | 20 ++++++++++---------- src/yomm2.cpp | 20 ++++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/include/yorel/yomm2/policies/core.hpp b/include/yorel/yomm2/policies/core.hpp index 8e7c4d84..e492cf7a 100644 --- a/include/yorel/yomm2/policies/core.hpp +++ b/include/yorel/yomm2/policies/core.hpp @@ -77,7 +77,7 @@ struct domain {}; } // namespace detail template -struct virtual_ptr; +class virtual_ptr; template struct virtual_; diff --git a/include/yorel/yomm2/policy.hpp b/include/yorel/yomm2/policy.hpp index edba89b2..291e9365 100644 --- a/include/yorel/yomm2/policy.hpp +++ b/include/yorel/yomm2/policy.hpp @@ -95,20 +95,20 @@ struct yOMM2_API_gcc debug backward_compatible_error_handler> {}; #if defined(_MSC_VER) && !defined(yOMM2_DLL) -extern template class __declspec(dllimport) basic_domain; -extern template class __declspec(dllimport) vptr_vector; -extern template class __declspec(dllimport) +extern template struct __declspec(dllimport) basic_domain; +extern template struct __declspec(dllimport) vptr_vector; +extern template struct __declspec(dllimport) vectored_error>; -extern template class __declspec(dllimport) fast_perfect_hash; -extern template class __declspec(dllimport) checked_perfect_hash; -extern template class __declspec(dllimport) +extern template struct __declspec(dllimport) fast_perfect_hash; +extern template struct __declspec(dllimport) checked_perfect_hash; +extern template struct __declspec(dllimport) basic_trace_output; -extern template class __declspec(dllimport) +extern template struct __declspec(dllimport) basic_error_output; -extern template class __declspec(dllimport) checked_perfect_hash; -extern template class __declspec(dllimport) +extern template struct __declspec(dllimport) checked_perfect_hash; +extern template struct __declspec(dllimport) backward_compatible_error_handler; -extern template class __declspec(dllimport) basic_policy< +extern template struct __declspec(dllimport) basic_policy< debug_shared, vptr_vector, std_rtti, checked_perfect_hash, basic_error_output, basic_trace_output, diff --git a/src/yomm2.cpp b/src/yomm2.cpp index d683e9df..3e9e67e4 100644 --- a/src/yomm2.cpp +++ b/src/yomm2.cpp @@ -23,17 +23,17 @@ namespace policy { //std::vector checked_perfect_hash::control; -template class yOMM2_API_msc basic_domain; -template class yOMM2_API_msc vptr_vector; -template class yOMM2_API_msc basic_indirect_vptr; -template class yOMM2_API_msc vectored_error< +template struct yOMM2_API_msc basic_domain; +template struct yOMM2_API_msc vptr_vector; +template struct yOMM2_API_msc basic_indirect_vptr; +template struct yOMM2_API_msc vectored_error< debug_shared, backward_compatible_error_handler>; -template class yOMM2_API_msc backward_compatible_error_handler; -template class yOMM2_API_msc fast_perfect_hash; -template class yOMM2_API_msc checked_perfect_hash; -template class yOMM2_API_msc basic_error_output; -template class yOMM2_API_msc basic_trace_output; -template class yOMM2_API_msc basic_policy< +template struct yOMM2_API_msc backward_compatible_error_handler; +template struct yOMM2_API_msc fast_perfect_hash; +template struct yOMM2_API_msc checked_perfect_hash; +template struct yOMM2_API_msc basic_error_output; +template struct yOMM2_API_msc basic_trace_output; +template struct yOMM2_API_msc basic_policy< debug_shared, std_rtti, checked_perfect_hash, basic_error_output, basic_trace_output, backward_compatible_error_handler>; From c0c06916bc073e9e801361d6a5cb1f41e820f39c Mon Sep 17 00:00:00 2001 From: Borislav Stanimirov Date: Tue, 2 Sep 2025 09:13:27 +0300 Subject: [PATCH 2/2] fix 32-bit shift --- include/yorel/yomm2/policies/fast_perfect_hash.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/yorel/yomm2/policies/fast_perfect_hash.hpp b/include/yorel/yomm2/policies/fast_perfect_hash.hpp index c4ee7c62..ac18174e 100644 --- a/include/yorel/yomm2/policies/fast_perfect_hash.hpp +++ b/include/yorel/yomm2/policies/fast_perfect_hash.hpp @@ -140,7 +140,7 @@ void fast_perfect_hash::hash_initialize( hash_search_error error; error.attempts = total_attempts; // error.duration = std::chrono::steady_clock::now() - start_time; - error.buckets = 1 << M; + error.buckets = size_t(1) << M; if constexpr (has_facet) { Policy::error(error_type(error));