class LongLived {};
class Foo
{
public:
Foo(LongLived& mutableLongLived)
: mMutableLongLived(mutableLongLived)
{}
LongLived& GetC1() { return GetC1Private(); }
const LongLived& GetC1() const { return GetC1Private(); }
private:
LongLived& GetC1Private() const {
// pretend a bunch of lines of code instead of just returning a single variable
return mMutableLongLived;
}
LongLived& mMutableLongLived;
};
int main() {
LongLived longLiver;
const Foo foo(longLiver);
foo.GetC1();
return 0;
}
Y2xhc3MgTG9uZ0xpdmVkIHt9OwoKY2xhc3MgRm9vCnsKICBwdWJsaWM6CiAgICBGb28oTG9uZ0xpdmVkJiBtdXRhYmxlTG9uZ0xpdmVkKQogICAgOiBtTXV0YWJsZUxvbmdMaXZlZChtdXRhYmxlTG9uZ0xpdmVkKQogICAge30KCiAgICBMb25nTGl2ZWQmIEdldEMxKCkgeyByZXR1cm4gR2V0QzFQcml2YXRlKCk7IH0KICAgIGNvbnN0IExvbmdMaXZlZCYgR2V0QzEoKSBjb25zdCB7IHJldHVybiBHZXRDMVByaXZhdGUoKTsgfQoKICBwcml2YXRlOgogICAgTG9uZ0xpdmVkJiBHZXRDMVByaXZhdGUoKSBjb25zdCB7CiAgICAJLy8gcHJldGVuZCBhIGJ1bmNoIG9mIGxpbmVzIG9mIGNvZGUgaW5zdGVhZCBvZiBqdXN0IHJldHVybmluZyBhIHNpbmdsZSB2YXJpYWJsZQogICAgCXJldHVybiBtTXV0YWJsZUxvbmdMaXZlZDsKICAgIH0KCiAgICBMb25nTGl2ZWQmIG1NdXRhYmxlTG9uZ0xpdmVkOwp9OwoKaW50IG1haW4oKSB7CglMb25nTGl2ZWQgbG9uZ0xpdmVyOwoJY29uc3QgRm9vIGZvbyhsb25nTGl2ZXIpOwoJZm9vLkdldEMxKCk7CglyZXR1cm4gMDsKfQ==