struct S1 {
  S1 foo() = delete;
};

struct S2 {
  template <typename T>
  S2 foo() = delete;
};

template <typename T>
struct S3 {
  S3 foo() = delete;
};

template <typename T>
struct S4 {
  S4 foo();
};
