当我向子类添加移动构造函数时,我发现我不能使用构造函数的默认参数。我也尝试在base_class
中使用带有零参数的重载构造函数,这些构造函数使用手动传递的参数调用普通构造函数,但我遇到了同样的问题。
Visual Studio的错误消息是:error C2512: 'child_class<base_class>': no appropriate default constructor available
class base_class {
public:
base_class(int param1=1) {}
};
template <typename BaseType>
class child_class : public BaseType {
public:
using BaseType::BaseType;
child_class(child_class&& move_in)
: BaseType(std::move(move_in)) {}
};
int main(int argc, char** argv) {
child_class<base_class> instance1; // MSVC says no default constructor so doesn't compile.
child_class<base_class> instance2(123); // No problem
}
答案 0 :(得分:3)
这可能是继承的构造函数实现中的MSVC错误。 Clang编译代码时没有抱怨。