#include <memory>
class C;
std::unique_ptr<C> pC;
C& f() {
if (!pC) throw 0; // OK, even though C is incomplete
return *pC; // OK, even though C is incomplete
}
template <class T>
class X
{
T t;
};
std::unique_ptr<X<C>> pX;
typename std::add_lvalue_reference<X<C>>::type DoSomeStuff() // exact copy of operator*
{
return (*pX.get());
}
void g() {
if ((bool)pX) return;
}
class C {};
int main()
{
auto z = DoSomeStuff();
}
I2luY2x1ZGUgPG1lbW9yeT4KCmNsYXNzIEM7CnN0ZDo6dW5pcXVlX3B0cjxDPiBwQzsKCkMmIGYoKSB7CiAgICBpZiAoIXBDKSB0aHJvdyAwOyAvLyBPSywgZXZlbiB0aG91Z2ggQyBpcyBpbmNvbXBsZXRlCiAgICByZXR1cm4gKnBDOyAgICAgICAgIC8vIE9LLCBldmVuIHRob3VnaCBDIGlzIGluY29tcGxldGUKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFgKewogICAgVCB0Owp9OwoKc3RkOjp1bmlxdWVfcHRyPFg8Qz4+IHBYOwoKdHlwZW5hbWUgc3RkOjphZGRfbHZhbHVlX3JlZmVyZW5jZTxYPEM+Pjo6dHlwZSBEb1NvbWVTdHVmZigpIC8vIGV4YWN0IGNvcHkgb2Ygb3BlcmF0b3IqCnsKICAgIHJldHVybiAoKnBYLmdldCgpKTsKfQoKdm9pZCBnKCkgewogICAgaWYgKChib29sKXBYKSByZXR1cm47Cn0KCmNsYXNzIEMge307CgppbnQgbWFpbigpCnsKICAgIGF1dG8geiA9IERvU29tZVN0dWZmKCk7Cn0KCgo=