コードにバグを見つけたばかりで、それが発生する可能性があることにかなり困惑しています。これは、単純な符号付き/符号なしの不一致であるためです。これは、警告レベル 4、警告をエラーとしてコンパイルしているため、まったく発生しないはずです。だから私はそれを再現しようとしましたが、これは非常に簡単です:
#include <memory>
class MyClass {
public:
MyClass( unsigned ) {}
};
int main()
{
MyClass* rawP = new MyClass(-1); // issues a warning, as expected
auto uniqueP = std::make_unique<MyClass>(-1); // NO WARNING??!
// silence the compiler
rawP;
uniqueP;
return 0;
}
今、私は自問自答しています: これの理由は何ですか? VS のバグですか、それとも std::make_unique の一般的な欠点ですか? それを修正する方法はありますか?(Visual Studio 2015 コミュニティ アップデート 3)