假设我们有一个不可复制的类型X
:
struct X
{
X(X&&) = default;
X(const X&) = delete;
}
然后,自然地,我们不能复制具有X
as 值类型的容器:
std::set<X> v;
std::set<X> v2{v} // error
我的问题是,涉及此类副本的表达式是否格式正确?例如,下面的表达式编译:
sizeof( std::set<X>{v} )
我在问,因为我遇到了以下问题:
std::cout << std::is_copy_constructible_v< X >;
std::cout << std::is_copy_constructible_v< std::set<X> >;
哪个打印出来01
。这有点违反直觉,std::set<X>
“报告”是可复制构造的,而实际上它不是(通过它的复制构造函数不能被调用)。