There should be made the following corrections:
1.) Implementation of Real SyntheticCDO::protectionLegNPV():
The last return value should be protectionValue_ instead of premiumValue_.
2.) Implementation of Rate SyntheticCDO::fairPremium ():
If the runningRate_ is set to zero, the premiumValue_ would be zero. This means that the return value is an error value. Wouldn't it be better to introduce the concept of a premium bpv and to use this value to calculate the fair premium?