I have a wrapper class and I want to modify the data and convert it back to its original type.
class A
{
public:
    A ( unsigned __int64 _a ) : a (_a)
    {
    }
    operator unsigned __int64 () const
    {
        return a;
    }
    unsigned __int64 a;
}; 
I want the object of this class to implicitly convert back to unsigned __int64, but it failed.
Say,
 A a( 0x100ull );
 unsigned __int64 b = (a >> 16);  // Error
Compiler gives C2678 error, no operator found or there is no acceptable conversion. 
It seems this function operator unsigned __int64 () const doesn't work.
To be more specific, compiler says there is no acceptable conversion. I cannot accept the complain, because I have already given a good one. Can someone legitimize it?
 
     
    