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;
}
This particular case seems to optimize well, but I suggest wariness.