This rule reduces confusion over which constructor will be used, and with what parameters.

== Noncompliant Code Example

Given the following classes:

----
class V
{
public:
  V ( ) { }
  V ( int32_t i ) { }
};

class C1 : public virtual V
{
public: 
 C1 ( ) : V ( 21 ) { }
};

class C2 : public virtual V
{
public: 
  C2 ( ) : V ( 42 ) { }
};
----
The following examples are not compliant:

----
class B : public V
{
  public B( ) { } // Non-compliant - benign
}

class D: public C1, public C2
{ 
public: 
 D ( ) { } // Non-compliant - it is unclear which constructor of V is called
};
----

== Compliant Solution

Given the previous definitions of classes V, C1 and C2 the following definitions of B and D are compliant:

----
class B : public V
{
  public B( ) : V ( ) { } // Compliant
}

class D: public C1, public C2 
{ 
public: 
 D ( ) : C1 ( ), C2 ( ), V ( ) { } // Compliant
};
----

include::../see.adoc[]
