Silverlan Silverlan - 1 month ago 9
C++ Question

Retrieve default value of in-class initialized member

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?

Answer

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.