Conversion between different template instantiation of the same template
        Posted  
        
            by Naveen
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Naveen
        
        
        
        Published on 2010-06-04T12:15:50Z
        Indexed on 
            2010/06/05
            14:02 UTC
        
        
        Read the original article
        Hit count: 273
        
I am trying to write an operator which converts between the differnt types of the same implementation. This is the sample code:
template <class T = int>
class A
{
public:
    A() : m_a(0){}
    template <class U>
    operator A<U>()
    {
        A<U> u;
        u.m_a = m_a; 
        return u;
    }
private:
    int m_a;
};
 int main(void)
{
    A<int> a;
    A<double> b = a;
    return 0;
}
However, it gives the following error for line u.m_a = m_a;. 
Error 2 error C2248: 'A::m_a' : cannot access private member declared in class 'A' d:\VC++\Vs8Console\Vs8Console\Vs8Console.cpp 30 Vs8Console
I understand the error is because A<U> is a totally different type from A<T>. Is there any simple way of solving this (may be using a friend?) other than providing setter and getter methods? I am using Visual studio 2008 if it matters.
© Stack Overflow or respective owner