int main関数の方で derive<int> d; と宣言すると[純枠仮想関数をオーバーライドするものがありません]というエラー出ます、純枠仮想関数を派生先で定義しているのにも関わらずエラーでる理由がわかりません。教えていただけますでしょうか?

template<class type,class typeb>
class base {
private:

protected:

public:
    base(){ }

    virtual void f(int x) {
        typeb a = x;
        std::cout << "仮想関数"<< a <<"\n";
    }

    virtual type f2(type x)const = 0;//純粋仮想関数

};

template<class typec> 
class derive : public base<class type,class typeb> {

public:
    derive(){ }

        void f(int x) {
        std::cout << "派生"<< x<<"\n";
    }

    typec f2(typec x)const {
        std::cout << x;

        return x;
    }

};