The method template <int KIND> Result operator()(const TypeParamInquiry<KIND> &) is defined in evaluate::GetShapeHelper as well as in its ancestor evaluate::Traverse. Normally, only the overloads of class that first defines method name would be considered, but the declaration using Base::operator() imports the base class methods with the same signature. Msvc interprets this as an ambiguity.
This pattern occurs in the following classes:
- evaluate::GetShapeHelper
- evaluate::IsConstantExprHelper
- evaluate::IsInitialDataTargetHelper
- evaluate::CheckSpecificationExprHelper
Fix by moving the generic TypeParamInquiry operator() overload into the derived classes that do not define this overload themselves.
This patch is part of the series to make flang compilable with MS Visual Studio.