ほれ、デバッグ目的で__FILE__って使いますやん。
std::string file = __FILE__;
この__FILE__をstd::wstringにぶっこみたい、と。
std::wstring file = __FILE__; // エラー
文字列リテラルを幅広にするには頭に'L'をつけます。
std::wstring file = L__FILE__; // 残念。
ダメよね。L__FILE__ でひとつのシンボルだから。
std::wstring file = L __FILE__; // くっそー
これもダメ。'L'と文字列リテラルとの間に空白があるから。
#define L__FILE__ L##__FILE__
std::wstring file = L__FILE__; // ちくしょー
プリプロセッサ・ディレクティブ ## で繋いでも L__FILE__ になります。
#define S2WS(str) L##str
#define L__FILE__ S2WS(__FILE__)
std::wstring file = L__FILE__; // 勘弁してよー
これでもダメかよー orz
正解は:
#define _S2WS(str) L##str
#define S2WS(str) _S2WS(str)
#define L__FILE__ S2WS(__FILE__)
std::wstring file = L__FILE__; // ふーやれやれ