The identifier `Expr` within the scope of the Expr class (including its temple specializations) refers to the current template/instantiation. The `MapTemplate` template expect a non-instantiated template as the first template argument, (see https://en.cppreference.com/w/cpp/language/injected-class-name for details). not the concrete The `MapTemplate` template expect a non-instantiation of `Expr`.ated template as the first template argument, More details at https://en.cppreference.com/w/cpp/language/injected-class-namenot the concrete instantiation of `Expr`.
At least msvc interprets `Expr` as the injected class name, whereas gcc and clang use the global `flang::evalue::Expr` template. Disambiguate by explicitly using the namespace.
This patch is part of the series to [[ http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html | make flang compilable with MS Visual Studio ]].