boost checked_delete.hppの中で
c++
1template<class T> inline void checked_delete(T * x) 2{ 3 // intentionally complex - simplification causes regressions 4 typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; 5 (void) sizeof(type_must_be_complete); 6 delete x; 7}
とあり、sizeof(T) ? 1 : -1でTが不完全型の場合、負サイズの配列をtypedefすることで、コンパイルエラーを出して、T型の完全性を判定しているように見えます。
ただその後の
c++
1(void) sizeof(type_must_be_complete);
の部分がなんのためにあるのかがイマイチ理解できません。
コメントにあるように、何らかの影響があるためこの実装になっていると思いますが、
理由がわかる方、ご教授いただけますでしょうか。
// intentionally complex - simplification causes regressions
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/23 08:58