#include <algorithm>
#include <iostream>
struct A
{
A(){std::cout << "C";}
~A(){std::cout << "D";}
};
A const& hi(A const& a)
{
return a;
}
int main()
{
{
A const& i = hi(A());
std::cout << " hi ";
}
std::cout << "\n--\n";
{
A const& i = std::move(A());
std::cout << " hi ";
}
std::cout << "\n--\n";
{
A const& i = static_cast<A const&>(A());
std::cout << " hi ";
}
std::cout << "\n--\n";
{
A const& i = static_cast<A&&>(A());
std::cout << " hi ";
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEKewogIEEoKXtzdGQ6OmNvdXQgPDwgIkMiO30KICB+QSgpe3N0ZDo6Y291dCA8PCAiRCI7fQp9OwoKQSBjb25zdCYgaGkoQSBjb25zdCYgYSkKewogIHJldHVybiBhOwp9CgppbnQgbWFpbigpCnsKICB7CiAgICBBIGNvbnN0JiBpID0gaGkoQSgpKTsKICAgIHN0ZDo6Y291dCA8PCAiIGhpICI7CiAgfQogIHN0ZDo6Y291dCA8PCAiXG4tLVxuIjsKICB7CiAgICBBIGNvbnN0JiBpID0gc3RkOjptb3ZlKEEoKSk7CiAgICBzdGQ6OmNvdXQgPDwgIiBoaSAiOwogIH0KICBzdGQ6OmNvdXQgPDwgIlxuLS1cbiI7CiAgewogICAgQSBjb25zdCYgaSA9IHN0YXRpY19jYXN0PEEgY29uc3QmPihBKCkpOwogICAgc3RkOjpjb3V0IDw8ICIgaGkgIjsKICB9CiAgc3RkOjpjb3V0IDw8ICJcbi0tXG4iOwogIHsKICAgIEEgY29uc3QmIGkgPSBzdGF0aWNfY2FzdDxBJiY+KEEoKSk7CiAgICBzdGQ6OmNvdXQgPDwgIiBoaSAiOwogIH0KfQ==