In the course of specializing some
of my code to accept various eigen matrix types, I ran into an MSC bug.
Essentially, eigen's classes have lots of members in the style of
"using Base::SomeEnumMember;". Using those kind of "inherited" members
as part of computations (not just unmodified usage) in template
parameters in MSC triggers compiler bugs or an ICE (depending on the
computation). I submitted a simple
test-case & bug report to microsoft, but that's been closed [WontFix].
One workaround would be to replace "using
Base::SomeEnumMember;" with "enum{ SomeEnumMember =
ei_traits<typename Base::Derived>::SomeEnumMember};".
Leaving it out entirely works in MSC but not in GCC, unless I'm missing
something. Alternatively, wouldn't it be possible to remove these
helpers entirely and just always refer to ei_traits for these things?