Index: flang/include/flang/Evaluate/call.h =================================================================== --- flang/include/flang/Evaluate/call.h +++ flang/include/flang/Evaluate/call.h @@ -252,9 +252,6 @@ : ProcedureRef{std::move(p), std::move(a)} {} std::optional GetType() const { return proc_.GetType(); } - std::optional> Fold(FoldingContext &); // for intrinsics }; - -FOR_EACH_SPECIFIC_TYPE(extern template class FunctionRef, ) } // namespace Fortran::evaluate #endif // FORTRAN_EVALUATE_CALL_H_ Index: flang/include/flang/Evaluate/expression.h =================================================================== --- flang/include/flang/Evaluate/expression.h +++ flang/include/flang/Evaluate/expression.h @@ -619,7 +619,8 @@ // There are no relations between LOGICAL values. template -struct Relational : public Operation, LogicalResult, T, T> { +class Relational : public Operation, LogicalResult, T, T> { +public: using Result = LogicalResult; using Base = Operation; using Operand = typename Base::template Operand<0>; @@ -651,10 +652,10 @@ common::MapTemplate u; }; -FOR_EACH_INTEGER_KIND(extern template struct Relational, ) -FOR_EACH_REAL_KIND(extern template struct Relational, ) -FOR_EACH_CHARACTER_KIND(extern template struct Relational, ) -extern template struct Relational; +FOR_EACH_INTEGER_KIND(extern template class Relational, ) +FOR_EACH_REAL_KIND(extern template class Relational, ) +FOR_EACH_CHARACTER_KIND(extern template class Relational, ) +extern template class Relational; // Logical expressions of a kind bigger than LogicalResult // do not include Relational<> operations as possibilities, Index: flang/include/flang/Semantics/symbol.h =================================================================== --- flang/include/flang/Semantics/symbol.h +++ flang/include/flang/Semantics/symbol.h @@ -683,7 +683,7 @@ const Symbol *GetParentComponent(const Scope * = nullptr) const; template friend class Symbols; - template friend struct std::array; + template friend class std::array; }; llvm::raw_ostream &operator<<(llvm::raw_ostream &, Symbol::Flag); Index: flang/lib/Evaluate/call.cpp =================================================================== --- flang/lib/Evaluate/call.cpp +++ flang/lib/Evaluate/call.cpp @@ -220,5 +220,4 @@ void ProcedureRef::Deleter(ProcedureRef *p) { delete p; } -FOR_EACH_SPECIFIC_TYPE(template class FunctionRef, ) } // namespace Fortran::evaluate