<div dir="ltr">Hi,<div>I was wondering if we should warn about cases like this:</div><div><br></div><div>







<p class="m_4135058122452041982gmail-p1"><span class="m_4135058122452041982gmail-s1"><b>struct</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">A</span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s4">final</span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">{</span></p>
<p class="m_4135058122452041982gmail-p1"><span class="m_4135058122452041982gmail-s2">   </span><span class="m_4135058122452041982gmail-s1"><b>virtual</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s1"><b>int</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">foo</span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">()</span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">{</span><span class="m_4135058122452041982gmail-s1"><b>return</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s5">42</span><span class="m_4135058122452041982gmail-s3">;}</span></p><p class="m_4135058122452041982gmail-p1"><span class="m_4135058122452041982gmail-s3">   // virtual doesn't make any sense because it is final base class</span></p>
<p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1">};</span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1"><br></span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1">or</span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1"><br></span></p><p class="m_4135058122452041982gmail-p1"><span class="m_4135058122452041982gmail-s1"><b>struct</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">A</span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">{</span></p><p class="m_4135058122452041982gmail-p1"><span class="m_4135058122452041982gmail-s2">  </span><span class="m_4135058122452041982gmail-s1"><b>virtual</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s1"><b>int</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">foo</span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s3">()</span><span class="m_4135058122452041982gmail-s2"> final </span><span class="m_4135058122452041982gmail-s3">{</span><span class="m_4135058122452041982gmail-s1"><b>return</b></span><span class="m_4135058122452041982gmail-s2"> </span><span class="m_4135058122452041982gmail-s5">42</span><span class="m_4135058122452041982gmail-s3">;}</span></p><p class="m_4135058122452041982gmail-p1"><span class="m_4135058122452041982gmail-s3">  // the same thing</span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1">









</span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1">};</span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1"><br></span></p><p class="m_4135058122452041982gmail-p2"><span class="m_4135058122452041982gmail-s1">So in both cases it sounds like a bug, specially in the first case. </span></p><p class="m_4135058122452041982gmail-p2">I don't see any resonable cases where this code would make sense (what you could not achieve with override keyword).</p><p class="m_4135058122452041982gmail-p2"><br></p><p class="m_4135058122452041982gmail-p2">If emiting warning in these cases make sense, dibs on that feature.</p><p class="m_4135058122452041982gmail-p2"><br></p><p class="m_4135058122452041982gmail-p2">Piotr</p></div></div>