平鍋です.
> だんのです。こんにちは。
> あぁ、最近この手の本を全然読んでない気がする・・。
だんのさん,こんにちは.お久しぶりです.
>> template<bool> struct CTAssert;
>> template<> CTAssert<true> { };
>>
>> です.コンパイル時に真と評価されるもののみ,コンパイルされます.
>>
>> CTAssert< sizeof(char) < sizeof(int) >;
>>
>> みたいに,使うことができます.
> これは、プログラムコードを移植する際に、うっかりはまるのを防ぐため
> のアサートってことですよね?
> 実際、64bitCPUにコードを移植したりすると、コンパイルが通るのだけど
> 動きがおかしいということもあるし、そういう時に重宝するのかも。
そうですね,そういう意味だと,#if, #error での対処が普通.
#if !(sizeof(char) < sizeof(int))
#error "not portable !"
#endif
とできるといいのだが,だめ.実際には,
#include <limits.h>
#if !(CHAR_MAX < INT_MAX)
#error "not portable !"
#endif
ですね...
しかし,CTAssert にはもっと違う用途もあって,
template<typename T, int N> class Vector {
CTAssert< 0 < N >;
T data[N];
// ....
};
なんて風に使えるのがおしゃれですね.ただし,エラーメッセージ
は訳分からん.
以上