以下面的成員函數:轉發的引用,參考限定符和模板的成員函數
struct T {
template <typename X> void f(X&& x) { /* ... */ }
};
在這種情況下,x
是轉發參考因爲&&
被用於模板的內部的功能的參數。這是預期的。
現在採取這樣的功能:
struct T {
template <typename X> void f(X&& x) && { /* ... */ }
};
我預計this
會以類似的方式進行處理;作爲轉發參考。因此,我期望下面的程序編譯和運行就好:
#include <iostream>
struct T {
template <typename X>
bool operator<(X&& rhs) && {
std::cout << "&&" << std::endl;
return true;
}
};
int main() {
T t;
std::cout << (t < T()) << std::endl;
return 0;
}
但是使用GCC 4.8.4和6.0.1,它沒有。相反,我得到如下:
rvalue.cpp: In function ‘int main()’:
rvalue.cpp:13:25: error: passing ‘T’ as ‘this’ argument of ‘bool T::operator<(X&&) && [with X = T]’ discards qualifiers [-fpermissive]
std::cout << (t < T()) << std::endl;
這樣看來,this
不是由轉發引用。 這是正確的還是錯誤的?應該將this
作爲轉發參考嗎?該標準的哪部分規定了這一點?
@JoachimPileborg剛剛用6.0.1試過,結果相同。雖然謝謝! – OMGtechy