Helllo, 我正在阅读Mach7中的以下代码(看起来很棒,我想知道为什么c ++ 17没有采用它,但这不是主题......)
bool operator==(const Term& left, const Term& right)
{
//std::clog << "(" << left << ',' << right << ')' << std::endl;
var<std::string> s;
//var<const Var&> v;
var<const Term&> v,t,f;
Match(left,right)
{
Case(C<Var>(s), C<Var>(+s) ) return true;
Case(C<Abs>(&v,&t), C<Abs>(&+v,&+t)) return true;
Case(C<App>(&f,&t), C<App>(&+f,&+t)) return true;
Otherwise() return false;
}
EndMatch
return false; // To prevent all control path warning
}
(见here)
“+ s”在第二场比赛中意味着什么?在语义上它应该意味着“通过调用构造函数来制作另一个像s”,但我从未见过这种语法。
答案 0 :(得分:4)
在探索之后(由于没有该类型的类实现unary operator +
,我很惊讶地发现)他们似乎创建了一个unary +
运算符,它们包含equivalence.hpp
。
TL; DR,它们在全局命名空间中具有以下内容:
template <typename T>
inline auto operator+(T&& t) noexcept { return true; }
除了他们实际做了些什么。 :)