boostorg / boostorg/pfr

`BOOST_PFR_FUNCTIONS_FOR` doesn't nest

Open
#89 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.5k
Forks
176
Avg merge
5d 21h
Merged PRs (30d)
1

Description

I don't know if this is a bug or feature, but `BOOST_PFR_FUNCTIONS_FOR` requires structure members to have an `std::hash` specialization, but it doesn't itself provide one, so the following example fails to compile:

```c++
#include

struct A { int a; };
BOOST_PFR_FUNCTIONS_FOR(A);
// namespace std { template<> struct hash { size_t operator()(A); }; }

struct B { A a; };
BOOST_PFR_FUNCTIONS_FOR(B);
```
[Godbolt](https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,selection:(endColumn:4,endLineNumber:5,positionColumn:4,positionLineNumber:5,selectionStartColumn:4,selectionStartLineNumber:5,startColumn:4,startLineNumber:5),source:'%23include+%3Cboost/pfr/functions_for.hpp%3E%0A%0Astruct+A+%7B+int+a%3B+%7D%3B%0ABOOST_PFR_FUNCTIONS_FOR(A)%3B%0A//+namespace+std+%7B+template%3C%3E+struct+hash%3CA%3E+%7B+size_t+operator()(A)%3B+%7D%3B+%7D%0A%0Astruct+B+%7B+A+a%3B+%7D%3B%0ABOOST_PFR_FUNCTIONS_FOR(B)%3B'),l:'5',n:'0',o:'C%2B%2B+source+%231',t:'0')),k:50,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((g:!((h:compiler,i:(compiler:g112,filters:(b:'0',binary:'1',commentOnly:'0',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,libs:!((name:boost,ver:'176')),options:'-std%3Dc%2B%2B17',selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'x86-64+gcc+11.2+(Editor+%231,+Compiler+%231)+C%2B%2B',t:'0')),k:50,l:'4',m:22.319688109161792,n:'0',o:'',s:0,t:'0'),(g:!((h:output,i:(compiler:1,editor:1,fontScale:14,fontUsePx:'0',wrap:'1'),l:'5',n:'0',o:'Output+of+x86-64+gcc+11.2+(Compiler+%231)',t:'0')),header:(),l:'4',m:77.68031189083821,n:'0',o:'',s:0,t:'0')),k:50,l:'3',n:'0',o:'',t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)

Uncommenting the hash specialization will make this code compile, but it's bothersome to do this for every type that just needs some comparison and print operations. Would it be possible to have a `BOOST_PFR_FUNCTIONS_FOR` version that doesn't try to generate a hash function? (Especially that it generates a `hash_value` function that is only compatible with boost containers, not an `std::hash` specialization that is a more compatible solution with C++11 or later.) Or at least make `hash_fields` compatible with `hash_value`?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.