Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 623
Silverlan Avatar asked Mar 10 '23 19:03

Silverlan


1 Answers

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.

like image 81
krzaq Avatar answered Mar 15 '23 22:03

krzaq