はじめまして、C++メタプログラミングを最近学び始めたものです。
テンプレートクラスのメンバーの定義の方法(または、フォーマット)についての質問です。
より具体的には、以下のコードの * (1) * の部分、template<>、が必要かまたはあれば意味が変わるのかということについてです。template<>があってもなくてもコンパイラからエラーが出ないので混乱してしまいました。とても基本的な質問かもしれませんがよろしくお願いします。

template<typename T_Self>
class FrameClass {
public:
    bool frameFunc(const T_Self& org, const T_Self& cmp) const override;
};

class TestClass {
public:
    using Self = TestClass;
private:
    bool testfunc(const Self& cmp) const;
    int a = 1;
};

template<>
class FrameClass<TestClass> {
public:
    using Type = TestClass;
    bool frameFunc(const Type& org, const Type& cmp) const override;
};

template<>  // *** (1) ***
bool FrameClass<TestClass>::frameFunc(const Type& org, const Type& cmp) const {
    bool diff_flg=false;
    if ( ( diff_flg = org.testfunc(cmp) ) ) {
        return diff_flg;
    }
    return diff_flg;
}