template<class... T>
class Passkey {
  friend T...;
  Passkey() {}
};

class A;
class B;

class C {
  friend A;
private:
  void internal();
public:
  void intentional(Passkey<A, B>);
};

class A {
  void m(C& c) {
    c.internal(); // OK
    c.intentional({}); // OK
  }
};

class B {
  void m(C& c) {
    c.intentional({}); // OK
  }
};