即使is_copy_constructible<T&&>
false
为相同类型is_copy_constructible<T>
,true
似乎T
。我用gcc和clang对此进行了测试,得到了相同的结果。这是预期的行为吗?标准在哪里定义了这个?这种行为的原因是什么?
使用错误"int&& doesn't work"
编译的示例代码:
#include <type_traits>
int main() {
static_assert(std::is_copy_constructible<int>::value, "int doesn't work");
static_assert(std::is_copy_constructible<int&>::value, "int& doesn't work");
static_assert(std::is_copy_constructible<int&&>::value, "int&& doesn't work");
return 0;
}
当我尝试在模板参数上创建约束时,我遇到了这种情况,以确保模板仅适用于可复制构造类型。我是否需要为r值引用类型创建一个特殊情况,以便让我的模板使用r值引用来复制可构造类型?
答案 0 :(得分:4)
is_copy_constructible<T>
定义为is_constructible<T, const T&>
。对于T = int &&
,后者变为is_constructible<int&&, int&>
,这显然是假的:
int & f();
int && r(f()); // ill-formed