Fix compilation issue with MSVC: MSVC always messes up with shadowed template arguments, for instance in:   struct B { typedef float T; }   template<typename T> struct A : B {     T g;   }; The type of A<double>::g will be float and not double. (grafted from aa10ce4a83d57178f86ee895090adaff1356a3db)
Fix compilation issue with MSVC:
MSVC always messes up with shadowed template arguments, for instance in:
  struct B { typedef float T; }
  template<typename T> struct A : B {
    T g;
  };
The type of A<double>::g will be float and not double.
(grafted from aa10ce4a83d57178f86ee895090adaff1356a3db)

ROCmSoftwarePlatform/hipeigen,ROCmSoftwarePlatform/hipeigen,ROCmSoftwarePlatform/hipeigen,ROCmSoftwarePlatform/hipeigen