Hi Alex,
On this issue, GCC is compliant to the ISO 14882 standard, the other compilers are not. Change the offending line to...
typename T::Fish theFish = T::Cod;
...and everything should be better. (And should work on all the aforementioned compilers.)
HTH, --Eljay