
VC++ 5.0 ambiguity: conversion operator vs overloaded operator?
Hi,
ARM says "User defined conversions are used implicitly only if they
are unambiguous" (12.3.2).
In the following code, if I define a operator+(int), VC used that in
preference to operator int(). If I take operator+(int) out, compiler
happily uses operator int().
VC5 clearly has a precedence algorithm of some kind in situations
where either an overloaded operator or a conversion operator could be
used. But that sems to contradict ARM a bit. Is that precedence rule
part of C++? Do you get same result on other compilers?
I'd appreciate a reply via e-mail as well as this group, as my
new server is a bit flaky.
Remember to remove the antispam alias in my mail address.
Thanks
Alan
//----------------------------------------------------------------------
#include <iostream>
using std::cout;
class MyClass
{
public:
MyClass() : m_myMember(0)
{cout << "in MyClass()\n";}
MyClass(int i) : m_myMember(i)
{cout << "in MyClass(int)\n";}
MyClass(MyClass& aMyClass)
{m_myMember = aMyClass.m_myMember;
cout << "in MyClass(MyClass&)\n";}
// apparently takes precedence over operator int() in situation
// MyClass dMyClass = aMyClass + 22; // used operator+(int anInt) if
defined
MyClass operator+(int anInt)
{cout << "in operator+(int)\n";
return MyClass(anInt + m_myMember);}
operator int()
{cout << "in operator int()\n";
return m_myMember;}
//virtual ~MyClass(); // accept default destructor
protected:
private:
int m_myMember;
Quote:
};
//////////////////////////////////////////////////////////////////
int main()
{
MyClass aMyClass = MyClass(23);
/*
if operator+(int) AND operator int() defined, uses
operator+(int): output is:
in MyClass(int)
in operator+(int)
in MyClass(int)
if ONLY operator int() defined, output is:
in MyClass(int)
in operator int()
in MyClass(int)
*/
MyClass dMyClass = aMyClass + 22; // used operator+(int anInt) if
defined
return 0;
Quote:
}
I'd appreciate replies via e-mail as well as this group, as
my newsserver is a bit flaky...but don't forget to remove
"antispam." from my address...
Yours,
Alan Campbell
Brighton, UK
<<<<<<<<<<<<<<<<<<<<<< >>>>>>>>>>>>>>>>>>>