我相信这应该有你正在寻找的语义:
template<typename X>
C make_c(X&& x)
{
static_assert(
!std::is_rvalue_reference<decltype(std::forward<X>(x))>::value,
"x must not be a temporary"
);
return C(std::forward<X>(x));
}
Run Code Online (Sandbox Code Playgroud)
警告:这会不会是由于其实施的不足之处上班,是用VC++ 2010 decltype(你需要包装decltype中std::identity<>).