Tag: 移动构造器

为什么派生类移动时可以构build基类不是?

考虑下面的例子: #include <iostream> #include <string> #include <utility> template <typename Base> struct Foo : public Base { using Base::Base; }; struct Bar { Bar(const Bar&) { } Bar(Bar&&) = delete; }; int main() { std::cout << std::is_move_constructible<Bar>::value << std::endl; // NO std::cout << std::is_move_constructible<Foo<Bar>>::value << std::endl; // YES. Why?! } 为什么编译器生成一个移动构造函数,尽pipe基类是不可移动的可构造的? 这是标准还是编译器错误? 是否有可能“完美地宣传”从基地到派生class的build设?