title: Is ADL the only way to call a friend inline function?
body: <p>Let us define <code>f</code>, as a friend function of <code>S</code>, inside the declaration of <code>S</code>:</p>
  
  <pre><code>struct S
  {
      friend void f() {}
  };
  </code></pre>
  
  <p>I cannot find a way to call <code>f</code>.</p>
  
  <p><strong>Is it true, then, that such an inline friend function can only be called with <a href="https://en.cppreference.com/w/cpp/language/adl" rel="noreferrer" title="ADL on cppreference.com">argument-dependant lookup</a>?</strong></p>
  
  <pre><code>struct S
  {
      friend void f() {}
      friend void g(S const&amp;) {}
  } const s;
  
  int main()
  {
      // f();     // error: 'f' was not declared in this scope
      // S::f();  // error: 'f' is not a member of 'S'
      g(s);
      // S::g(s); // error: 'g' is not a member of 'S'
  }
  </code></pre>
  
  <p>Bonus: what if I want to get a function-pointer/<code>std::function</code>/lambda to <code>g</code>?</p>