考慮以下代碼片段:
#include <utility>
struct test {
template <class Other>
test& operator=(Other&&);
int& i_;
};
int main() {
int i = 0;
test t1{i}, t2{i};
t1 = std::move(t2); // tries to select the implicitly-declared one!
}
嘗試使用 GCC11.1 (with -std=c 2a)進行編譯時,它會嘗試選擇編譯器生成的operator=,它被洗掉并失敗。以前的 GCC 版本成功地構建了這個代碼。
據我了解,隱式生成的deleteoperator=是不可行的,所以應該選擇算子模板。是 GCC 錯誤還是我遺漏了什么?
uj5u.com熱心網友回復:
這似乎是一個錯誤。它在 GCC 11.2 上查找模板化方法,但正如您所提到的,它在 GCC 11.1 上看到已洗掉的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409058.html
標籤:
