The identifier Expr within the scope of the Expr class (including its temple specializations) refers to the current template/instantiation (see https://en.cppreference.com/w/cpp/language/injected-class-name for details). The MapTemplate template expect a non-instantiated template as the first template argument, not the concrete instantiation of Expr.
At least msvc interprets Expr as the injected class name, whereas gcc and clang use the global flang::evaluate::Expr template. Disambiguate by explicitly using the namespace.
This patch is part of the series to make flang compilable with MS Visual Studio.