(char*) とか書いていませんか? sign_cast作ってみた

よく文字列やバッファを扱う関数でchar*とunsigned char*が変換できずに(char*)とか書いてませんか?
これはかなり危険な書き方なのでやめた方がいいです。C形式のキャストをやめてC++形式のキャストを使っても危ないです。
static_castだと変換できません。reinterpret_castを使用することになりますがこれもまた危ないです。char*型をやめてwchar_t*に切り替えたとしたら何の警告も出ずにコンパイルが通ってしまいます。
そこで符号だけを変換できるより安全なキャストを作りました。
safe sign-type cast · GitHub
これなら符号以外を変換しようとするとコンパイルエラーになってくれます。

#include "sign_cast.hpp"

unsigned char* s=0;
sign_cast<char*>(s); //ok
wchar_t* t=0;
sign_cast<char*>(t); //error

追記: 2012/04/20
const, volatileを付加する場合はコンパイルが通るようにしました。