Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why operator = doesn't get inherited from a template class

I have following template code:

class ClassName{};

template <class T>
class TemplatePtr
{
public:
    void operator=(T* p)
    {

    }
};

class TemplatePtr_ClassName: public TemplateePtr<ClassName>
{
public:
    ~TempaltePtr_ClassName();
};


void Test()
{
    TemplatePtr_ClassName data;
    data = new ClassName;
}

but compile fails with error message (VS2008):

error C2679: binary '=' : no operator found which takes a right-hand operand of type >>'ClassName *' (or there is no acceptable conversion)

Why it won't work as I have defined an operator in the template base class?

like image 543
Baiyan Huang Avatar asked Nov 08 '10 08:11

Baiyan Huang


1 Answers

It gets inherited. However, the compiler-generated assignment operator for TempaltePtr_ClassName hides the inherited operator. You can make it visible by adding

using TempaltePtr<ClassName>::operator=;

to your derived class.

like image 94
avakar Avatar answered Oct 10 '22 19:10

avakar