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.34k stars 161 forks source link

is_reflectable documentation #164

Open anarthal opened 8 months ago

anarthal commented 8 months ago

I've been trying to understand is_reflectable, but I fail to get what to pass as second argument. My case looks like this:

template <class RowType>
class static_results {
    static_assert(pfr::is_pfr_reflectable<RowType, Something>::value, "RowType must be reflectable");
    // Implementation
};

I want to check that my user type provided me with a RowType that is a structure that can be reflected, i.e. I can call structure_to_tuple, for_each_field and friends on it.

anarthal commented 8 months ago

I thought I had it with this line:

static_assert(pfr::is_implicitly_reflectable<MyType, struct t>(), "");

But it looks like it only returns a suitable value on C++17 and above. Otherwise it returns always false. From reading the code, it looks like implicit reflection is referring to the structured bindings reflection technique available only on C++17. However, this is never stated in the docs, and the "always return false" behavior is surprising.

apolukhin commented 6 months ago

I'd appreciate a PR with the fixes :)