C++11を勉強し始めたのですが、下の例がokになる実装がいまいち理解できません。

struct s {
 int x;
 explicit s(int x_)
  : x(x_*2)
 {
 }
};
std::vector<s> v;
v.emplace_back(s(2)); // ok
v.emplace_back(3); // ok

これは、どういうからくりでしょうか?