It's sometimes the case that whilst manipulating std::meta::info with ranges that the underlying type of the std::meta::info is required, for example: to do some transformations on the underlying type.
It seems that type_of should be the right tool for the job, but that's not the case and instead substantial effort is required. The following is an example of how to lifting to type from std::meta::info can be achieved.
template <class R>
consteval auto invoke(auto fn, std::meta::info m) {
return value_of<R>(reflect_invoke(^fn, {substitute(^meta, {reflect_value(m)})}));
}
Simple example of filter with test_test or, more generic, conversion to type:
Maybe there is a better way or maybe type_of should be made to work in such case or maybe there should be some utility such as invoke to make that simpler? Not sure, just wanted to raise it here as it's not trivial and/or clear, at least for me, what's the canonical way to do it?
It's sometimes the case that whilst manipulating std::meta::info with ranges that the underlying type of the std::meta::info is required, for example: to do some transformations on the underlying type.
It seems that type_of should be the right tool for the job, but that's not the case and instead substantial effort is required. The following is an example of how to lifting to type from std::meta::info can be achieved.
Simple example of filter with test_test or, more generic, conversion to type:
Maybe there is a better way or maybe
type_of
should be made to work in such case or maybe there should be some utility such asinvoke
to make that simpler? Not sure, just wanted to raise it here as it's not trivial and/or clear, at least for me, what's the canonical way to do it?