Рассмотрим следующий код:
class Foo
{
public:
//class-specific
Foo operator+(Foo& rhs)
{
return Foo(); //Just return a temporary
}
void* operator new(size_t sd)
{
return malloc(sd);
}
};
//global
Foo operator+(Foo& lhs, Foo& rhs)
{
return Foo();
}
void* operator new(size_t sd)
{
return malloc(sd);
}
Этот код не скомпилируется, заявив, что вызов неоднозначен, поскольку он соответствует двум операторам:
Foo a, b;
a + b;
Но этот с новым операторомкомпилируется просто отлично, и будет вызывать класс-специфический.
Foo* a = new Foo();
Почему это не приводит к ошибке компиляции?Компилятор обрабатывает новый оператор по-другому?(Любая ссылка на стандарт будет принята.)