#include <iostream>
struct Parameters
{
Parameters &val()
{
return *this;
}
};
void f(const Parameters &)
{
std::cout << "const Parameters &\n";
}
void f(Parameters &)
{
std::cout << "Parameters &\n";
}
template<typename T>
T &i_know_what_i_am_doing(const T ¶ms)
{
return const_cast<T&>(params);
}
int main(int argc,char *argv[])
{
f(Parameters());
f(Parameters().val().val());
f(i_know_what_i_am_doing(Parameters()));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFBhcmFtZXRlcnMKewoJUGFyYW1ldGVycyAmdmFsKCkKCXsKCQlyZXR1cm4gKnRoaXM7Cgl9Cn07Cgp2b2lkIGYoY29uc3QgUGFyYW1ldGVycyAmKQp7CglzdGQ6OmNvdXQgPDwgImNvbnN0IFBhcmFtZXRlcnMgJlxuIjsKfQoKdm9pZCBmKFBhcmFtZXRlcnMgJikKewoJc3RkOjpjb3V0IDw8ICJQYXJhbWV0ZXJzICZcbiI7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgJmlfa25vd193aGF0X2lfYW1fZG9pbmcoY29uc3QgVCAmcGFyYW1zKQp7CglyZXR1cm4gY29uc3RfY2FzdDxUJj4ocGFyYW1zKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQp7CglmKFBhcmFtZXRlcnMoKSk7CglmKFBhcmFtZXRlcnMoKS52YWwoKS52YWwoKSk7CglmKGlfa25vd193aGF0X2lfYW1fZG9pbmcoUGFyYW1ldGVycygpKSk7CglyZXR1cm4gMDsKfQo=