C++ 14/1y:"运算符+必须采用一个或两个参数"的标准参考号?

And*_*zos 0 c++ c++14

在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)

use*_*267 5

[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中的规则确定使用哪种解释(如果有).