这是我的片段:
class Base{};
class Derived : private Base{};
template<class T>
class Wrapper
{
public:
template<typename T2>
Wrapper( T2&& )
{ }
};
// Function declarations
void func( Base& param );
void func( Wrapper<Derived> );
void funcUnambiguous( Wrapper<Derived> );
// Here is the Call:
Derived d = Derived();
func( d ); // <- Error
GCC 4.9 给了我:error: 'Base' is an inaccessible base of 'Derived'
而我这样做
Derived d = Derived();
funcUnambiguous( d );
它工作正常。
看起来,任何只需要廉价转换的函数,即使格式错误,也隐藏了隐式但昂贵的转换函数。有人有线索吗?