/*
 * Copyright (c) 2018-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
struct A {
  virtual void foo();
  virtual void bar();
  void bazoo();
};

struct B : public A {
  void foo() override;
  void bar(int i);
  void bar() /* override */;
  void bazoo();
};

namespace Foo {

class SvIf {
 public:
  virtual ~SvIf() {}
  virtual void async_tm_poke() {}
  virtual void future_poke() {}
  virtual void semifuture_poke() {}
};

namespace Bar {

class SvIf : public Foo::SvIf {
 public:
  virtual ~SvIf() {}
  virtual void poke() {}
  virtual void async_tm_poke() override {}
  virtual void future_poke() override {}
  virtual void semifuture_poke() override {}
};

} // namespace Bar
} // namespace Foo

class ServiceBase {};

class FooBarService : public ServiceBase, public Foo::Bar::SvIf {
 public:
  explicit FooBarService() {}
  virtual void poke() override {}
  virtual void async_tm_poke() override {}
  virtual void future_poke() override {}
  virtual void semifuture_poke() override {}
};
