#include <iostream>
#include <string>
struct S {
std::string name_ = "defaulted";
S() = default;
S(const char* name) : name_(name) {}
S(S&& rhs) { std::swap(name_, rhs.name_); name_ += " moved"; }
};
void fn(S s)
{
std::cout << "fn(" << s.name_ << ")\n";
}
template<typename T>
void fwd_test(T&& t)
{
fn(std::forward<T>(t));
fn(std::forward<T>(t));
}
int main() {
fwd_test(S("source"));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IFMgewoJc3RkOjpzdHJpbmcgbmFtZV8gPSAiZGVmYXVsdGVkIjsKCVMoKSA9IGRlZmF1bHQ7CglTKGNvbnN0IGNoYXIqIG5hbWUpIDogbmFtZV8obmFtZSkge30KCVMoUyYmIHJocykgeyBzdGQ6OnN3YXAobmFtZV8sIHJocy5uYW1lXyk7IG5hbWVfICs9ICIgbW92ZWQiOyB9Cn07Cgp2b2lkIGZuKFMgcykKewoJc3RkOjpjb3V0IDw8ICJmbigiIDw8IHMubmFtZV8gPDwgIilcbiI7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgZndkX3Rlc3QoVCYmIHQpCnsKCWZuKHN0ZDo6Zm9yd2FyZDxUPih0KSk7CglmbihzdGQ6OmZvcndhcmQ8VD4odCkpOwp9CgppbnQgbWFpbigpIHsKCWZ3ZF90ZXN0KFMoInNvdXJjZSIpKTsKfQ==