【发布时间】:2018-12-13 09:35:06
【问题描述】:
例如,如果我有
#include <type_traits>
struct OwnershipReceiver
{
template <typename T,
class = typename std::enable_if
<
!std::is_lvalue_reference<T>::value
>::type
>
void receive_ownership(T&& t)
{
// taking file descriptor of t, and clear t
}
};
复制自How to make template rvalue reference parameter ONLY bind to rvalue reference?
海报使用!std::is_lvalue_reference,而不是更明显的std::is_rvalue_reference。我已经在我自己的代码中验证了这一点,前者有效,后者无效。
谁能解释为什么显而易见的方法不起作用?
【问题讨论】:
-
您是否阅读了有关您已链接问题的已接受答案的 cmets?似乎对我来说已经很好地回答了你的问题。如果没有,在您的问题中至少包含一个您希望不起作用的具体示例可能会很有用。
-
你读过cmets吗?最后一条评论问为什么,没有答案。值得提出一个额外的问题来澄清推理。
-
好的,有一个建议使用 is_rvalue_reference
::value 代替,我想我可以结合@songyuanyao的回答来理解为什么
标签: c++ c++11 templates enable-if