【发布时间】:2013-01-04 07:54:25
【问题描述】:
我试图在另一个函数的尾随返回类型中重用运算符的返回类型,但不幸的是,clang 不接受它
struct A {
int operator[](int);
auto at(int i) -> decltype((*this)[i]);
};
Clang 说我的班级没有 operator[]。 Gcc 确实接受了我的代码。我的代码真的无效吗?
【问题讨论】:
-
Clang 应该是对的,
this在成员函数声明时不可用,它只在成员函数内部可用。 (§9.3.2/1 “在非静态 (9.3) 成员函数的主体中,关键字this是纯右值表达式 [...]”)。 -
@xeo 我不同意。作为最后一分钟的更改,马德里的委员会在尾随返回类型中使用 this 有效,以方便继承封闭成员函数的常量。
-
如果clang说没有
operator[](int),那显然是错的。那么问题是什么?关于在此处使用this的有效性问题是一个不同 的问题。我同意 Johannes 的观点,它必须在这里有效。 -
那么,问题真的是:你可以在 decltype 中使用
this来返回方法吗? -
@Bjo 不,我的问题是这段代码是否有效。 clang 通常接受在尾随返回类型中使用“this”,所以我不确定我应该更准确地问什么。
标签: c++ c++11 operator-keyword language-lawyer trailing-return-type