i got this program is in http://www.parashift.com/c++-faq-lit...l-classes.html

the code is
#include <iostream>
#include <memory>
using namespace std;

class Fred;

class FredBase {
          friend class Fred;
            FredBase() {cout<<"FredBase Cons"<<endl; }

class Fred : virtual private FredBase {
            cout<<"Fred Cons"<<endl;

class Leaf : public Fred

int main()
    Leaf f;
    return 0;
It works and do not allow to instantiate the Leaf object.

I have confusion about the virtual keyword in (class Fred : virtual private FredBase )

why it is required.
If i remove the virtual keyword it is allowing me to create the Leaf f object.

What is the importance of virtual here ?