#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"));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IFMgewoJc3RkOjpzdHJpbmcgbmFtZV8gPSAiZGVmYXVsdGVkIjsKCVMoKSA9IGRlZmF1bHQ7CglTKGNvbnN0IGNoYXIqIG5hbWUpIDogbmFtZV8obmFtZSkge30KCVMoUyYmIHJocykgeyBzdGQ6OnN3YXAobmFtZV8sIHJocy5uYW1lXyk7IG5hbWVfICs9ICIgbW92ZWQiOyB9Cn07Cgp2b2lkIGZuKFMmJiBzKQp7CglzdGQ6OmNvdXQgPDwgImZuKCIgPDwgcy5uYW1lXyA8PCAiKVxuIjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBmd2RfdGVzdChUJiYgdCkKewoJZm4oc3RkOjpmb3J3YXJkPFQ+KHQpKTsKCWZuKHN0ZDo6Zm9yd2FyZDxUPih0KSk7Cn0KCmludCBtYWluKCkgewoJZndkX3Rlc3QoUygic291cmNlIikpOwp9