/* Row */
struct T_cash_account_row {
// Fields:
enum T_field_enum { amount_of_money_e, gender_e, age_e, code_e, height_e, /*<<<<<- add fields here (with index) */
last_e /*<<<<<- add included fields here (without index) */
};
static_assert(last_e > 0, "Number of indexed fields in enum of T_user_row must be greater than 0!");
unsigned code:20; // 0 - 1000000
unsigned gender:1; // 0 - 1
unsigned age:7; // 0 - 100
unsigned amount_of_money:20; // 0 - 1000000
int height; // 0 – 300
// Get field value
template<int field_enum> inline unsigned get_field_value();
template<int field_enum> inline int get_field_value();
static_assert(5 == last_e, "Add/delete new field-case and correct this assert!");
};
template<> inline unsigned T_cash_account_row::get_field_value<T_cash_account_row::code_e>() { return code; }
template<> inline unsigned T_cash_account_row::get_field_value<T_cash_account_row::gender_e>() { return gender; }
template<> inline unsigned T_cash_account_row::get_field_value<T_cash_account_row::age_e>() { return age; }
template<> inline unsigned T_cash_account_row::get_field_value<T_cash_account_row::amount_of_money_e>() { return amount_of_money; }
template<> inline int
T_cash_account_row::get_field_value<T_cash_account_row::height_e>() { return height; }
template<> inline unsigned T_cash_account_row::get_field_value<T_cash_account_row::last_e>() { return 1; }
/* ----------------------------------------------------------------------- */
int main() {
T_cash_account_row *row = new T_cash_account_row;
auto code = row->get_field_value<T_cash_account_row::code_e>();
return 0;
}
LyogUm93ICovCnN0cnVjdCBUX2Nhc2hfYWNjb3VudF9yb3cgewoKICAgIC8vIEZpZWxkczoKICAgIGVudW0gVF9maWVsZF9lbnVtIHsgYW1vdW50X29mX21vbmV5X2UsIGdlbmRlcl9lLCBhZ2VfZSwgY29kZV9lLCBoZWlnaHRfZSwgICAvKjw8PDw8LSBhZGQgZmllbGRzIGhlcmUgKHdpdGggaW5kZXgpICovCgkJbGFzdF9lIC8qPDw8PDwtIGFkZCBpbmNsdWRlZCBmaWVsZHMgaGVyZSAod2l0aG91dCBpbmRleCkgKi8KCX07CglzdGF0aWNfYXNzZXJ0KGxhc3RfZSA+IDAsICJOdW1iZXIgb2YgaW5kZXhlZCBmaWVsZHMgaW4gZW51bSBvZiBUX3VzZXJfcm93IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAhIik7CgogICAgCXVuc2lnbmVkIGNvZGU6MjA7CQkJLy8gMCAtIDEwMDAwMDAKCXVuc2lnbmVkIGdlbmRlcjoxOwkJCS8vIDAgLSAxCgl1bnNpZ25lZCBhZ2U6NzsJCQkvLyAwIC0gMTAwCQoJdW5zaWduZWQgYW1vdW50X29mX21vbmV5OjIwOwkvLyAwIC0gMTAwMDAwMAoJaW50IGhlaWdodDsJCQkJLy8gMCDigJMgMzAwCgoJLy8gR2V0IGZpZWxkIHZhbHVlCgl0ZW1wbGF0ZTxpbnQgZmllbGRfZW51bT4gaW5saW5lIHVuc2lnbmVkIGdldF9maWVsZF92YWx1ZSgpOwoJdGVtcGxhdGU8aW50IGZpZWxkX2VudW0+IGlubGluZSBpbnQgZ2V0X2ZpZWxkX3ZhbHVlKCk7CgoJc3RhdGljX2Fzc2VydCg1ID09IGxhc3RfZSwgIkFkZC9kZWxldGUgbmV3IGZpZWxkLWNhc2UgYW5kIGNvcnJlY3QgdGhpcyBhc3NlcnQhIik7Cn07Cgp0ZW1wbGF0ZTw+IGlubGluZSB1bnNpZ25lZCAJVF9jYXNoX2FjY291bnRfcm93OjpnZXRfZmllbGRfdmFsdWU8VF9jYXNoX2FjY291bnRfcm93Ojpjb2RlX2U+KCkgeyByZXR1cm4gY29kZTsgfQp0ZW1wbGF0ZTw+IGlubGluZSB1bnNpZ25lZCAJVF9jYXNoX2FjY291bnRfcm93OjpnZXRfZmllbGRfdmFsdWU8VF9jYXNoX2FjY291bnRfcm93OjpnZW5kZXJfZT4oKSB7IHJldHVybiBnZW5kZXI7IH0KdGVtcGxhdGU8PiBpbmxpbmUgdW5zaWduZWQgCVRfY2FzaF9hY2NvdW50X3Jvdzo6Z2V0X2ZpZWxkX3ZhbHVlPFRfY2FzaF9hY2NvdW50X3Jvdzo6YWdlX2U+KCkgeyByZXR1cm4gYWdlOyB9CnRlbXBsYXRlPD4gaW5saW5lIHVuc2lnbmVkIAlUX2Nhc2hfYWNjb3VudF9yb3c6OmdldF9maWVsZF92YWx1ZTxUX2Nhc2hfYWNjb3VudF9yb3c6OmFtb3VudF9vZl9tb25leV9lPigpIHsgcmV0dXJuIGFtb3VudF9vZl9tb25leTsgfQp0ZW1wbGF0ZTw+IGlubGluZSBpbnQgCglUX2Nhc2hfYWNjb3VudF9yb3c6OmdldF9maWVsZF92YWx1ZTxUX2Nhc2hfYWNjb3VudF9yb3c6OmhlaWdodF9lPigpIHsgcmV0dXJuIGhlaWdodDsgfQp0ZW1wbGF0ZTw+IGlubGluZSB1bnNpZ25lZCAJVF9jYXNoX2FjY291bnRfcm93OjpnZXRfZmllbGRfdmFsdWU8VF9jYXNoX2FjY291bnRfcm93OjpsYXN0X2U+KCkgeyByZXR1cm4gMTsgfQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKaW50IG1haW4oKSB7CiAgICBUX2Nhc2hfYWNjb3VudF9yb3cgKnJvdyA9IG5ldyBUX2Nhc2hfYWNjb3VudF9yb3c7CiAgICBhdXRvIGNvZGUgPSByb3ctPmdldF9maWVsZF92YWx1ZTxUX2Nhc2hfYWNjb3VudF9yb3c6OmNvZGVfZT4oKTsKICAgIAogICAgcmV0dXJuIDA7Cn0K
prog.cpp: In function ‘int main()’:
prog.cpp:34:66: error: call of overloaded ‘get_field_value()’ is ambiguous
prog.cpp:34:66: note: candidates are:
prog.cpp:23:29: note: unsigned int T_cash_account_row::get_field_value() [with int field_enum = 3]
prog.cpp:18:38: note: int T_cash_account_row::get_field_value() [with int field_enum = 3]
prog.cpp:34:66: error: unable to deduce ‘auto’ from ‘<expression error>’
prog.cpp:34:10: warning: unused variable ‘code’ [-Wunused-variable]