template <template <typename> class Derived, typename T>
class Base{
  public:
      Derived<T> processing(){
        return *static_cast<Derived<T> *>(this);
      }
};

template <typename T>
class Derived : public Base<Derived, T> {
};

int main() {
  Derived<int> derived1;
  Derived<int> derived2 = derived1.processing();
  return 0;
}
