What the C++ rules in regard to covariant return types?
<p>Like in the example below, what is allowed, how and why?    </p>

<pre><code>class Shape {
      public:
        //...
        virtual Shape *clone() const = 0; // Prototype
        //...
    };
    class Circle : public Shape {
      public:
        Circle *clone() const;
        //...
    };
</code></pre>
