下記のコードは、普通に通るよね。
-
#include <boost/shared_ptr.hpp>
-
#include <iostream>
-
-
int main(int argc, char** argv)
-
{
-
boost::shared_ptr<int> p;
-
if (p == NULL) {
-
std::cout <<"null" <<std::endl;
-
}
-
-
return 0;
-
}
んで、NULL を置き換えてたらコンパイラが落ちました。
-
//! ぬるぽ
-
//! http://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/nullptr
-
// const オブジェクトであって、
-
const class nullptr_t
-
{
-
public:
-
// 任意の非メンバ型のヌルポインタや、
-
template<class T> operator T*() const { return 0; }
-
-
// 任意のメンバ型のヌルポインタに変換可能であって、
-
template<class C, class T> operator T C::*() const { return 0; }
-
-
private:
-
void operator&() const; // アドレスを取得することができない。
-
} nullptr = {};
-
-
-
//! NULL 値
-
#undef NULL
-
#define NULL nullptr
-
-
#include <boost/shared_ptr.hpp>
-
#include <iostream>
-
-
int main(int argc, char** argv)
-
{
-
boost::shared_ptr<int> p;
-
if (p == NULL) {
-
std::cout <<"null" <<std::endl;
-
}
-
-
return 0;
-
}
fatal error C1001: コンパイラで内部エラーが発生しました。
(コンパイラ ファイル 'msc1.cpp'、行 1393)
この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。
詳細については、Visual C++ ヘルプ メニューのサポート情報コマンドを
選択してください。またはサポート情報 ヘルプ ファイルを参照してください。
何も落ちなくてもなぁ。。
ちなみに if (p != NULL) でも落ちました。
