Is there any way of directly retrieving the default value of a member, which has been defined using in-class initialization? For example:
struct Test
{
int someValue = 5;
};
int main(int argc,char *argv[])
{
auto val = declvalue(Test::someValue); // Something like this; Should return 5
std::cout<<val<<std::endl;
for(;;);
return 0;
}
Basically something that 'copies' (Similar to decltype) the entire declaration, including the default value. Does something like that exist?
If your type is default constructible, you can write your own declvalue
:
template<typename T, typename C>
constexpr T declvalue(T C::* ptr)
{
return C{}.*ptr;
}
which would be used as follows:
int main() {
cout << declvalue(&Test::someValue) << endl;
}
live demo
This particular case seems to optimize well, but I suggest wariness.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With