在C++ 1y/C++ 14标准中,它表示以下翻译单元格式不正确?
struct S {};
void operator+(S,S,S);
Run Code Online (Sandbox Code Playgroud)
错误是:
error: ‘void operator+(S, S, S)’ must take either one or two arguments
Run Code Online (Sandbox Code Playgroud)
[over.unary]
1前缀一元运算符应由不带参数的非静态成员函数(9.3)或带有一个参数的非成员函数实现.因此,对于任何前缀一元运算符@,@ x可以解释为x.operator @()或operator @(x).如果已声明了两种形式的运算符函数,则13.3.1.2中的规则确定使用哪种解释(如果有).有关后缀一元运算符++和 - 的解释,请参见13.5.7.
[over.binary]
1二元运算符应由具有一个参数的非静态成员函数(9.3)或具有两个参数的非成员函数实现.因此,对于任何二元运算符@,x @ y可以解释为x.operator @(y)或operator @(x,y).如果已声明了两种形式的运算符函数,则13.3.1.2中的规则确定使用哪种解释(如果有).