2

コードにバグを見つけたばかりで、それが発生する可能性があることにかなり困惑しています。これは、単純な符号付き/符号なしの不一致であるためです。これは、警告レベル 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)

4

1 に答える 1