这看起来像一个编译器错误,但案例是如此简单我有点怀疑,所以我正在寻找一个确认。VS2010 和 VS2012 均可重现。下面的示例无法编译。给出此错误:
错误 1 错误 C2440:“类型转换”:无法从“ConvertibleToAny”转换为“OtherType<_Ty>”test.cpp 40
如果将移动构造函数的位置移动到构造函数OtherType(ThisType &&)
之上OtherType( int )
,它会突然编译。
#include "stdafx.h"
#include <string>
using namespace std;
template<class _Ty>
struct OtherType
{
typedef OtherType<_Ty> ThisType;
OtherType()
{
}
OtherType( int )
{
}
// The move constructor
OtherType(ThisType && )
{
}
};
struct ConvertibleToAny
{
template <class AnyType>
operator AnyType()
{
return AnyType();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
(OtherType<wstring>) ConvertibleToAny();
return 0;
}
这是一个错误还是这是预期的行为?如果符合预期,请引用 C++11 规范中的相关段落。我已经在 Microsoft Connect 上将此作为错误发布,请单击此处将其打开。