diff --git a/flang/lib/evaluate/expression.cc b/flang/lib/evaluate/expression.cc index b961e32762b2..a89816a55d1f 100644 --- a/flang/lib/evaluate/expression.cc +++ b/flang/lib/evaluate/expression.cc @@ -189,6 +189,16 @@ template DynamicType ArrayConstructor::GetType() const { return result.GetType(); } +template +typename ExpressionBase::Derived &ExpressionBase::derived() { + return *static_cast(this); +} + +template +const typename ExpressionBase::Derived &ExpressionBase::derived() const { + return *static_cast(this); +} + template std::optional ExpressionBase::GetType() const { if constexpr (IsLengthlessIntrinsicType) { diff --git a/flang/lib/evaluate/expression.h b/flang/lib/evaluate/expression.h index c2300071fbd2..832a6baa3717 100644 --- a/flang/lib/evaluate/expression.h +++ b/flang/lib/evaluate/expression.h @@ -68,8 +68,8 @@ public: private: using Derived = Expr; - Derived &derived() { return *static_cast(this); } - const Derived &derived() const { return *static_cast(this); } + Derived &derived(); + const Derived &derived() const; public: template Derived &operator=(const A &x) {