return std::move(obj);
って意味ある?
NRVOが阻害されるだけで使いみちない気がするんだけどイマイチ理解してない