2
0
mirror of https://github.com/boostorg/pfr.git synced 2026-01-23 17:52:15 +00:00

24 Commits

Author SHA1 Message Date
Antony Polukhin
228922fdb5 Update copyright years 2026-01-04 11:26:11 +03:00
Antony Polukhin
4f9e6457b0 Add multiple tests from different bug reports and make sure that ever… (#222)
…ything works with new unsafe_declval and with sturctured binding pack

Fixes: https://github.com/boostorg/pfr/issues/208,  https://github.com/boostorg/pfr/issues/110, https://github.com/boostorg/pfr/issues/126
Closes: https://github.com/boostorg/pfr/pull/212
Relates: https://github.com/boostorg/pfr/issues/173
2025-09-14 14:59:25 +03:00
Antony Polukhin
fc2dba87d6 Multiple fixes for the structured bindings pack implementation (#221) 2025-09-11 21:51:07 +03:00
Antony Polukhin
d9fde1f2a0 core: add an implementation based on C++26 destructuring into a pack (#220)
Tested with clang-21

---------

Co-authored-by: Jean-Michaël Celerier <jeanmichael.celerier@gmail.com>
2025-09-07 20:26:44 +03:00
Antony Polukhin
8cbffcb7ab Harden the CI checks for CMake and fix some issues (#215)
Fixes: https://github.com/boostorg/pfr/issues/214
2025-06-27 20:23:23 +03:00
Antony Polukhin
dcf2deb959 Fix for 'Arrays of Length Zero' compiler extension (#213) 2025-06-20 15:56:51 +03:00
Antony Polukhin
8417d4fd2d Fix test after Boost.TypeIndex modularization 2025-05-12 19:53:03 +03:00
Antony Polukhin
b95fd86595 Fix CMake tests build fail (fixes #198) (#201) 2025-05-12 17:28:20 +03:00
Antony Polukhin
5a48d7456f Rewrite modules following the new recommended Boost practice (#196)
Changes:

1) `#include <boost/pfr...` is now implicitly does `import boost.pfr` if the modules are supported 
2) CI now tests modules on Ubuntu 24.04 with existing runtime tests
3) Renamed module to `boost.pfr`
4) CMakeLists.txt now uses modules for `Boost::pfr` target if modules are supported
5) All the library internals now have unconditional module level linkage. `1)` allows users to mix `#include <boost/pfr...` and `import boost.pfr` in user code without ODR-violations.

Significant differences from https://anarthal.github.io/cppblog/modules3:
* PFR uses a `BOOST_PFR_USE_STD_MODULE` macro for `import std;` / `includes` while building module. This allows to use `boost.pfr` module in C++20 and even without usable  `std` module.
2025-04-16 09:16:09 +03:00
Antony Polukhin
3fe5ce61ee Update copyright years 2025-01-08 20:27:31 +03:00
Zachary Wassall
ff415a26ff Improve field count typical case performance (#120)
The tightest upper bound one can specify on the number of fields in a
struct is `sizeof(type) * CHAR_BIT`. So this was previously used when
performing a binary search for the field count. This upper bound is
extremely loose when considering a typical large struct, which is more
likely to contain a relatively small number of relatively large fields
rather than the other way around. The binary search range being multiple
orders of magnitude larger than necessary wouldn't have been a
significant issue if each test was cheap, but they're not. Testing a
field count of N costs O(N) memory and time. As a result, the initial
few steps of the binary search may be prohibitively expensive.

The primary optimization introduced by these changes is to use unbounded
binary search, a.k.a. exponential search, instead of the typically
loosely bounded binary search. This produces a tight upper bound (within
2x) on the field count to then perform the binary search with.

As an upside of this change, the compiler-specific limit placed on the
upper bound on the field count to stay within compiler limits could be
removed.
2024-10-09 14:12:39 +03:00
René Ferdinand Rivera Morell
e1e908e804 Add support for modular build structure. (#174) 2024-08-24 12:34:29 +03:00
Antony Polukhin
dec9341546 Update ci.yml (#178) 2024-08-14 20:28:49 +03:00
Antony Polukhin
8f3b819b1e Allow throwing exceptions from pfr::structure_to_tuple (fixes #155) … (#160)
…and fix some warnings
2024-02-15 10:10:46 +03:00
Antony Polukhin
16d771f498 Update copyright years 2024-01-07 13:12:44 +03:00
Alexander Karatarakis
b5e523f2b3 Make for_each_field() constexpr for c++17 (#134)
#127
2023-08-12 10:43:20 +03:00
Antony Polukhin
e61fa139b6 Add CI tests run on msvc-14.3 in C++20 mode (#136) 2023-08-11 15:05:25 +03:00
Antony Polukhin
963460a3c1 fix CI (#135) 2023-08-10 17:22:31 +03:00
René Ferdinand Rivera Morell
b0bf18798c Fix missing include for unique_ptr. (#125) 2023-03-07 09:33:06 +03:00
Antony Polukhin
ab509a5b32 implement pfr::get by type (#123) 2023-02-21 14:28:28 +03:00
Antony Polukhin
551174b58c Update copyright years 2023-01-19 10:03:04 +03:00
Antony Polukhin
79b0d65d4f Merge remote-tracking branch 'denzor200/typo_fix' into develop 2023-01-18 19:05:08 +03:00
denzor200
b1af355a49 Workaround for broken C++17 stuctured binding in old compilers 2023-01-09 23:30:41 +06:00
denzor200
52a5a489ba split tests into two projects 2023-01-07 01:48:39 +06:00