C++では型変換はコンストラクタで行うことになってる。
それも、暗黙ではなく、明示的に呼び出す形が推薦される。
変な予約語を追加してまで、わざわざそうした。
(予断だが、型変換オペレータもあるが、危険なので、今は誰も使っていない)
そこまでして暗黙の型変換を徹底的に排除する姿勢が今のC++。
std::string::compareが数値型を取ることは、C++の現状にマッチしていないのだよ。