これはコンパイラのバグのように見えますが、ケースは非常に単純で、少し懐疑的であるため、確認を求めています。VS2010とVS2012の両方で再現可能。以下の例はコンパイルされません。このエラーが発生します:
エラー1エラーC2440:「型キャスト」:「ConvertibleToAny」から「OtherType<_Ty>」に変換できませんtest.cpp40
OtherType(ThisType &&)
コンストラクターの上にmoveコンストラクターの位置を移動すると、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仕様の関連する段落を引用してください。これはすでにMicrosoftConnectにバグとして投稿されています。ここをクリックして開きます。