class variant {
public:
 variant(const std::string& in_value) :value(in_value) {}
 ~variant() {}
 operator const char*() const { return value.c_str(); }
 template <typename value_type>
 operator value_type() const {
  return boost::lexical_cast<value_type>(value);
 }
private:
 const std::string value;
};

variant GetData(データ格納先) {
 return variant(データ);
}

という実装を試してみたんですが

int a = GetData(データ格納先); // safe
string s = GetData(データ格納先); // abnormal termination
const char* lpstr = GetData(データ格納先); // lexical_cast内部でコンパイルエラー

となってしまいした・・・
引数の場合はテンプレートに対して型を明示してやればオーバーロードできたのですが
キャストオペレータ(て言うのかな)の場合はうまく特殊化できないようなのです
なにか解決策はありますか?

環境はBCC5.5.1+BCC添付のSTL+BOOST1.28