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?
I also suggest to implement a function that gives the upfront premium value similar to the function premiumValue() that gives the running premium value.
Moved to https://github.com/lballabio/QuantLib/issues/365