为什么GCC在匹配函数时会查看私有构造函数?

Rob*_*uld 1 c++ gcc

我现在非常忙于调试一些代码,所以我不能做一个完整的例子,但这基本上描述了我的问题

class Base{};
class MyX:public Base
{
  ...
};
class Derived:Base
{
  ...
};
template<class X>
class MyClass:Derived
{
private:
   MyClass(const MyClass& )
     :x()
   {}
public:
   MyClass(const X& value)
    :x(value)
   {}
};

....
MyX      x;
MyClass<MyX>(x);
Run Code Online (Sandbox Code Playgroud)

这给我一个这样的错误:

error: there are two possible constrcutors MyClass<X>(const MyClass<X>&) and MyClass<X>(const X&)
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 6

MyClass<MyX>(x);
Run Code Online (Sandbox Code Playgroud)

被解析为

MyClass<MyX> x;
Run Code Online (Sandbox Code Playgroud)

但是MyClass<MyX>没有默认的构造函数.试着给它一个名字:

MyClass<MyX> p(x);
Run Code Online (Sandbox Code Playgroud)