class - C++ compilation error, ambigous operator overloads -
i have template array class overloading both operator [] access items , operator t * direct buffer access.
template< typename t > class buffer { const t & operator [] ( size_t ) const; t & operator [] ( size_t ); operator const t * () const; operator t * (); }; for reason, using operator [] on instance of class generates compilation error saying there 4 possible overloads.
buffer< int > buf; buf[ some_position ] = 0; // generates error error :
error 3 error c2666: 'xxx::buffer<t>::operator []' : 4 overloads have similar conversions c:\xxx.cpp 3886 is operator [] trying convert instance buf t * ? why 4 overloads detected instead of 2 ? thank you. :)
edit : : buf[ some_position ] = 0; // generates error
the issue have implicit conversions going in both directions.
disregarding const, 2 candidates are:
t & buffer::operator [] ( size_t ); int& operator[] (int*, int); for call buf[pos] pos int (such literal), call ambiguous. first candidate selected converting pos std::size_t , second selected converting buf int*.
you disambiguate call explicitly casting argument std::size_t, or modifying operator take int instead.
Comments
Post a Comment