std::thread で実行するメンバ関数が static かそうでないかでの書き方の違い

確認した環境

本題

std::thread の1番目の引数にクラスのメンバ関数を渡すとき、 そのメンバ関数が static かそうでないかで書き方が異なります。 static でないメンバ関数では2番目の引数に this を指定するという違いもありますが、 それだけでなく1番目の引数において、 static メンバ関数ではコンパイルが通る書き方でも static でないメンバ関数では通らない書き方があります。
以下にコードを示します。

class MyClass {
public:
    explicit MyClass(int n) : n_(n) {}

    void run() {
        sth_ = std::thread(static_member_func);             // OK
        //sth_ = std::thread(MyClass::static_member_func);  // OK
        //sth_ = std::thread(&static_member_func);          // OK
        //sth_ = std::thread(&MyClass::static_member_func); // OK

        //th_ = std::thread(member_func, this);             // NG
        //th_ = std::thread(MyClass::member_func, this);    // NG
        //th_ = std::thread(&member_func, this);            // NG
        th_ = std::thread(&MyClass::member_func, this);     // OK
    }
    void join() {
        sth_.join();
        th_.join();
    }

private:
    static void static_member_func() {
        std::cout << "MyClass::static_member_func" << std::endl;
    }

    void member_func() {
        std::cout << "MyClass::member_func (n = " << n_ << ")" << std::endl;
    };
    int n_;

    std::thread sth_;
    std::thread th_;
};

上記コードのrunメソッドにおいて各メンバ関数で4通りの書き方を示しました。
static メンバ関数では、4つのうち3つはコメントアウトしてますが、4通りすべての書き方でコンパイルが通ります。 一方、static でないメンバ関数では4通りのうちコメントアウトしていない1つの書き方のみコンパイルが通り、 残りの3つの書き方ではコンパイルが通りません。

参考