>>785
> {}付けるとX型に見なされてコピーコンストラクタで初期化されるで合ってますか?

いいえ。 直接初期化に該当します。
コピー (コピーコンストラクタの起動) は発生しません。
つまり X x1(f0); と書いた場合と同じということです。
ですから暗黙の変換を一段階すれば充分なのでエラーなく通ります。

> コンストラクタの引数代入時に変換追加するということでいいですか?

いいえ。 何もしません。
コンパイルを通すためには不要ですので、 X のコンストラクタは

template <class T>
X(const T& f_) : f(f_) {}

という定義だけでも問題なく動作します。

ただ、こうすると T は「あらゆる型」になりえます。
std::function<void()> に変換不可能な型も受け入れてしまうということです。
変換不可能であればいずれにしても最終的にはエラーなのですが、
X がデタラメな型も受け入れてから F に変換失敗してエラーになるよりは
特定の条件を満たす型以外を X が拒否するほうが一般的には都合がよいので
そうなるようにしたのです。

コンパイルを通すために必要なのではなく通さないための処置です。