为什么这个运算符在尾随返回类型中的用法不能编译?

Joh*_*itb 18 c++ language-lawyer operator-keyword c++11 trailing-return-type

我试图在另一个函数的尾随返回类型中重用运算符的返回类型,但不幸的是clang不接受它

struct A {
  int operator[](int);
  auto at(int i) -> decltype((*this)[i]);
};
Run Code Online (Sandbox Code Playgroud)

Clang说我班上没有算子[].Gcc确实接受了我的代码.我的代码真的无效吗?

小智 3

我想说 clang 是正确的,因为 13.3.1.2p3 (第一个项目符号)。

对于操作数@为 cv 无限定版本为 的类型的一元运算符T1,以及@左操作数为 cv 无限定版本为 的类型T1且右操作数为 cv 无限定版本的类型的二元运算符T2,为 3候选函数集、指定成员候选函数、非成员候选函数和内置候选函数的构造如下:

  • 如果T1是完整类类型,则候选成员集合是 T1::operator@(13.3.1.1.1) 的合格查找结果;否则,候选成员集合为空

(强调由@sehe添加)

  • 仅超链接的答案很糟糕。你似乎已经把它提升到了一个全新的水平!此链接因设计而被破坏。您至少可以_引用_相关文字吗? (2认同)