I followed up on the Scott's idea with `operator<<(ss_,obj)` , and partially solved the ambiguity..there are 2 ways: 

1/ brute-force, kick-away templates from the methods definition and define it multiple times, when I use 
`LoggingException& operator<< (const NTA_BasicType& t) {...}` I get past this compilation error. Downside is need to implement these methods for all "abstract" types (Dimension, Fraction). 

2/ other way could be define `ostream& operator<<(ostream& f, NTA_BasicType b)` (eg like in Dimension), seems clang does not automatically "interpret the << for parts of the enum", while gcc does. This would avoid the necessity to rewrite Fraction, etc..