Синтаксис С++ позволяет определять перегруженные операторы либо внутри struct/class, например:
struct X
{
void operator+(X);
}
или вне структуры/класса, например:
void operator+(X, X);
но не как
struct X
{
static void operator+(X, X);
}
Знает ли какой-либо орган причины этого решения? Почему третья форма не разрешена? (MSVC дает синтаксическую ошибку). Может быть, за этим стоит какая-то история?
p.s. Наличие первого и второго определений в то же время создает двусмысленность:
1>CppTest1.cxx
1>c:\ballerup\misc\cf_html\cpptest1.cxx(39) : error C2593: 'operator +' is ambiguous
1> c:\ballerup\misc\cf_html\cpptest1.cxx(13): could be 'void B1::operator +(B1 &)'
1> c:\ballerup\misc\cf_html\cpptest1.cxx(16): or 'void operator +(B1 &,B1 &)'
1> while trying to match the argument list '(B1, B1)'
Я не понимаю, почему эта двусмысленность лучше, чем между 1,3 или 2,3.