title: Why a virtual call to a pure virtual function from a constructor is UB and a call to a non-pure virtual function is allowed by the Standard?
body: <p>From 10.4 <strong>Abstract Classes</strong> parag. 6 in the Standard :</p>
  
  <p>"Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making a virtual call to a pure virtual function directly or indirectly for the object being created (or destroyed) from such a constructor (or destructor) is undefined."</p>
  
  <p>Assuming that a call to a non-pure virtual function from a constructor (or destructor), is allowed by the Standard, why the difference ? </p>
  
  <p>[EDIT] More standards quotes about pure virtual functions:</p>
  
  <p>§ 10.4/2 A virtual function is specified pure by using a pure-specifier (9.2) in the function declaration in the class definition. <strong>A pure virtual function needs be defined only if</strong> called with, or as if with (12.4), the qualified-id syntax (5.1).   ... [ Note: A function declaration cannot provide both a pure-specifier and a definition —end note ]</p>
  
  <p>§ 12.4/9 <strong>A destructor can be declared</strong> virtual (10.3) or <strong>pure virtual</strong> (10.4); if any objects of that class or any derived class are created in the program, <strong>the destructor shall be defined.</strong></p>
  
  <p>Some questions that need answering are:</p>
  
  <ul>
  <li><p>Where the pure virtual function has not been given an implementation, should this not be a compiler or linker error instead?</p></li>
  <li><p>Where the pure virtual function has been given an implementation, why can it not be well-defined in this case to invoke this function?</p></li>
  </ul>