lexical_cast.hpp に含まれる謎の文字
Boost C++ Libraries を使っていると、意味不明の警告やエラーに遭遇することがあります。lexical_cast もそのひとつです。比較的よく使うライブラリなだけに厄介なのですが、まずはその原因から探ってみることにしましょう。
Visual C++ 2005 で <boost/lexical_cast.hpp> をインクルードすると、
warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
という警告が出ます。また、GCCで -finput-charset=cp932 などのオプションを付けてコンパイルしようとすると、
failure to convert cp932 to UTF-8
というエラーが発生してしまいます。いずれも、エラーや警告が発生した行番号も教えてくれないため、途方にくれてしまいます。
このエラーや警告の原因ですが、lexical_cast.hpp のファイルヘッダ(コメント)の中に、Terje Slettebø さんという contributor が含まれていることにあります。とはいえ、何も Terje Slettebø さんが悪いわけではなく、彼の名前に含まれる 'ø' という文字が悪さをしているのです。
コメントなので動作に影響することはありませんし、普通ならサクッとその部分を削除してしまうところなのですが、contributor の名前ということもあって、なかなかそこまで思い切ったことができません。ライセンスに抵触しても嫌ですし、道義的にも怪しいものです。
そこで何とか対策を考えてみました。'ø' の文字を、国際文字名を使って \u00f8 と書き換えるのです。結果として彼の名前は、Terje Sletteb\u00f8 になります。何となく違和感はありますが、名前を消したわけでも、別の名前にしたわけでもありませんし、情報は損なわれていない(はず)なので、これで許してもらうことにしましょう。
技術的にはともかく、本当にこの対策でよいのかどうかは保証できません。ソースファイルを修正される場合は、あくまでも自己責任で行ってください。
2007年7月3日 追記
Visual C++ 2005の場合は警告ですので、/wd オプションの指定や、#pragma warning を用いることで警告を抑止することも可能です。


こちらからも@IT会議室にリンクしておきます
最近、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=41975&forum=7&st... から来られる方が非常に多いようです。
他の方々にとっても有益な情報が掲載されていますので、こちらからもリンクを貼っておきます。