Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有右值引用参数的模板赋值运算符与vs2013和gcc的行为不同_C++_Templates_Visual Studio 2013_Assignment Operator_Rvalue Reference - Fatal编程技术网

C++ 带有右值引用参数的模板赋值运算符与vs2013和gcc的行为不同

C++ 带有右值引用参数的模板赋值运算符与vs2013和gcc的行为不同,c++,templates,visual-studio-2013,assignment-operator,rvalue-reference,C++,Templates,Visual Studio 2013,Assignment Operator,Rvalue Reference,为什么下面的代码 #include <iostream> struct A { template<typename T> A &operator=(T &&rhs) { std::cout << "A::operator= called" << std::endl; return *this; } }; int main() { A a1; a1 =

为什么下面的代码

#include <iostream>

struct A {
    template<typename T>
    A &operator=(T &&rhs) {
        std::cout << "A::operator= called" << std::endl;
        return *this;
    }
};

int main() {
    A a1;
    a1 = A();
    return 0;
}
#包括
结构A{
模板
运算符=(T&&rhs){

std::coutGCC是正确的。您的类型有一个隐式声明的移动赋值运算符,它比模板更匹配

如果您导致隐式移动分配被抑制,例如通过添加用户声明的析构函数,则将使用您的模板。

Visual Studio中可能存在此模板的副本。它不会隐式生成移动构造函数和移动分配运算符。