diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h --- a/flang/lib/Evaluate/fold-implementation.h +++ b/flang/lib/Evaluate/fold-implementation.h @@ -1155,8 +1155,11 @@ return *array; } return std::visit( - [&](auto &kindExpr) -> Expr { + [&context, &convert](auto &kindExpr) -> Expr { using Operand = ResultType; + // This variable is a workaround for msvc which emits an error when + // using the FROMCAT template parameter below. + TypeCategory constexpr FromCat{FROMCAT}; char buffer[64]; if (auto value{GetScalarConstantValue(kindExpr)}) { if constexpr (TO::category == TypeCategory::Integer) { @@ -1213,7 +1216,7 @@ return Expr{value->IsTrue()}; } } else if constexpr (std::is_same_v && - FROMCAT != TypeCategory::Character) { + FromCat != TypeCategory::Character) { return std::move(kindExpr); // remove needless conversion } return Expr{std::move(convert)};