boostorg / pfr

std::tuple like methods for user defined types without any macro or boilerplate code
https://boost.org/libs/pfr
Boost Software License 1.0
1.33k stars 159 forks source link

Is it possible to handle C arrays? Possible implementation linked #185

Open quicknir opened 1 month ago

quicknir commented 1 month ago

There's another library called repr which claims to handle C arrays properly: https://godbolt.org/z/vbz639n4d. Can this solution be used to handle C arrays properly in boost pfr?

Here's a link to the implementation as it appears in the source tree (rather than amalgamated): https://github.com/Tsche/repr/blob/master/include/librepr/reflection/detail/arity.h

Tsche commented 1 month ago

This defect was one of the reasons I wrote my own library :P

Related: https://github.com/boostorg/pfr/issues/16 https://github.com/boostorg/pfr/issues/20 https://github.com/boostorg/pfr/issues/162 https://github.com/boostorg/pfr/issues/169 https://github.com/boostorg/pfr/issues/170

p00f commented 1 month ago

The fix in #170 works, I've tested it with giant multiply-nested structs

apolukhin commented 2 weeks ago

Solution from #170 breaks multiple tests. It requires some additional tweaking, I'd appreciate a PR.

As a quick workaround you could replace native C array with std::array

p00f commented 2 weeks ago

std::array is not an option because the structs containing the arrays are from headers i don't control

I'm willing to fix the tests but don't have much experience with template metaprogramming, would it be fine if I give it a try and you can guide me in the PR?

p00f commented 2 weeks ago

Also, how do I run the tests?

apolukhin commented 1 week ago

would it be fine if I give it a try and you can guide me in the PR?

Yes, I'll do my best

Also, how do I run the tests?

I usually checkout the whole Boost with submodules https://github.com/boostorg/boost

Then run the ./bootstrap.sh

After that

cd libs/pfr/test
../../../b2 cxxstd=17 toolset=clang-19
p00f commented 1 week ago

cxxstd=17

don't you need 20 for this names_as_array and friends?

toolset=clang-19

my distro only has llvm 18

regardless, i'll try and see if this works

p00f commented 1 week ago

https://github.com/boostorg/pfr/pull/189