模板化运算符=() 和重载解析



请考虑以下代码片段:

#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(带-std=c++2a)进行编译时,它会尝试选择编译器生成的operator=,该被删除并失败。以前的 GCC 版本已成功生成此代码。

据我了解,隐式生成的删除operator=是不可行的,因此应选择运算符模板。是 GCC 错误还是我错过了什么?

这似乎是一个错误。它在 GCC 11.2 上查找模板化方法,但正如您提到的,它在 GCC 11.1 上看到已删除的方法。

相关内容

  • 没有找到相关文章

最新更新