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