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

时间:2014-04-25 07:31:07

标签: c++ c++14

在C ++ 1y / C ++ 14标准中,它是否说下面的翻译单元格式不正确?

struct S {};

void operator+(S,S,S);

错误是:

error: ‘void operator+(S, S, S)’ must take either one or two arguments

1 个答案:

答案 0 :(得分:5)

[over.unary]

  

1前缀一元运算符应由非静态成员实现   函数(9.3)没有参数或非成员函数 1   参数即可。因此,对于任何前缀一元运算符@,@ 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中的规则确定哪个,如果   任何,使用解释。