class DM
{
public:
int something;
DM() : something(0) { }
};
typedef DM * dm_t;
typedef dm_t & dm_ref_t;
typedef const DM * dm_const_t;
typedef const dm_const_t & dm_cref_t;
int getSomething( dm_cref_t dm ) // CALLING getSomething DOES NOT COMPILE
{
return dm->something;
}
int getSomethingAgain( dm_const_t dm )
{
return dm->something;
}
int getSomethingOnceMore( dm_ref_t dm )
{
return dm->something;
}
int main()
{
dm_t dm = new DM;
getSomething( dm ); // COMPILER ERROR COMES FROM HERE
getSomethingAgain( dm );
getSomethingOnceMore( dm );
return 0;
}
Y2xhc3MgRE0KewpwdWJsaWM6CiAgICBpbnQgc29tZXRoaW5nOwogICAgRE0oKSA6IHNvbWV0aGluZygwKSB7IH0KfTsKCnR5cGVkZWYgRE0gKiBkbV90Owp0eXBlZGVmIGRtX3QgJiBkbV9yZWZfdDsKdHlwZWRlZiBjb25zdCBETSAqIGRtX2NvbnN0X3Q7CnR5cGVkZWYgY29uc3QgZG1fY29uc3RfdCAmIGRtX2NyZWZfdDsKCmludCBnZXRTb21ldGhpbmcoIGRtX2NyZWZfdCBkbSApIC8vIENBTExJTkcgZ2V0U29tZXRoaW5nIERPRVMgTk9UIENPTVBJTEUKewogICAgcmV0dXJuIGRtLT5zb21ldGhpbmc7Cn0KCmludCBnZXRTb21ldGhpbmdBZ2FpbiggZG1fY29uc3RfdCBkbSApCnsKICAgIHJldHVybiBkbS0+c29tZXRoaW5nOwp9CgppbnQgZ2V0U29tZXRoaW5nT25jZU1vcmUoIGRtX3JlZl90IGRtICkKewogICAgcmV0dXJuIGRtLT5zb21ldGhpbmc7Cn0KCmludCBtYWluKCkKewogICAgZG1fdCBkbSA9IG5ldyBETTsKICAgIGdldFNvbWV0aGluZyggZG0gKTsgLy8gQ09NUElMRVIgRVJST1IgQ09NRVMgRlJPTSBIRVJFCiAgICBnZXRTb21ldGhpbmdBZ2FpbiggZG0gKTsKICAgIGdldFNvbWV0aGluZ09uY2VNb3JlKCBkbSApOwogICAgcmV0dXJuIDA7Cn0=