title: When does a package need to use ::: for its own objects
body: <p>Consider this R package with two functions, one exported and the other internal</p>
  <p><strong>hello.R</strong></p>
  <pre><code>#' @export
  hello &lt;- function() {
    internalFunctions:::hello_internal()
  }
  </code></pre>
  <p><strong>hello_internal.R</strong></p>
  <pre><code>hello_internal &lt;- function(x){
      print(&quot;hello world&quot;)
  }
  </code></pre>
  <p><strong>NAMESPACE</strong></p>
  <pre><code># Generated by roxygen2 (4.1.1): do not edit by hand
  
  export(hello)
  </code></pre>
  <hr />
  <p>When this is checked (<code>devtools::check()</code>) it returns the <code>NOTE</code></p>
  <pre><code>There are ::: calls to the package's namespace in its code. A package
    almost never needs to use ::: for its own objects:
    ‘hello_internal’
  </code></pre>
  <hr />
  <h3>Question</h3>
  <p>Given the <code>NOTE</code> says <strong>almost never</strong>, under what circumstances <strong>will</strong> a package need to use <code>:::</code> for its own objects?</p>
  <hr />
  <p><strong>Extra</strong></p>
  <p>I have a very similar <a href="https://stackoverflow.com/q/36805601/5977215">related question</a> where I do require the <code>:::</code> for an internal function, but I don't know <strong>why</strong> it's required. Hopefully having an answer to this one will solve that one. I have a suspicion that unlocking the environment is doing something I'm not expecting, and thus having to use <code>:::</code> on an internal function.</p>
  <p>If they are considered duplicates of each other I'll delete the other one.</p>