tr1::regexで質問です。

以下のコードで例外はかれるんですが
正規表現の記述方法がオーソドックスな方法と異なっているとかありましたっけ?
やりたいことはパスに含まれる\を/に置換したいだけなんですが・・
boostとかでは動いてました。

#include <string>
#include <regex>

void test(void)
{
std::string org_path = "hoge\\hage\\fuga/aaa\\hoger";
std::regex expression( "[\\]+" );
std::string replace( "/" );
std::string new_path = regex_replace( org_path, expression, replace );
}

まず置換以前に regexのコンストラクタ
expression( "[\\]+" );
で例外(std::tr1::regex_error)がでます。
これを
expression( "\\" );
にしたところ例外はでなくなりregex_replaceも実行されますが
\が/に置換されません。

[]系の角括弧で落ちてるのかと思い、
expression( "[h]" );
とかにしてテストしてみましたが、こっちは正常置換されました。
これ何とかなりませんかね・・?