diff --git a/components/esm/esmbridge.hpp b/components/esm/esmbridge.hpp index 8810e30594..ee6238cbc6 100644 --- a/components/esm/esmbridge.hpp +++ b/components/esm/esmbridge.hpp @@ -18,6 +18,15 @@ namespace ESM struct CellId; class RefId; + class CellVariant; + + template + using Substitute = T; + + template + using VisitReturnType = std::enable_if_t<(std::is_base_of_v> && ...), + typename std::invoke_result...>::type>; + class CellVariant { protected: @@ -39,7 +48,7 @@ namespace ESM const ESM::Cell& getEsm3() const; template - friend auto visit(F&& f, T&&... v); + friend VisitReturnType visit(F&& f, T&&... v); }; struct ReferenceVariant @@ -66,7 +75,7 @@ namespace ESM }; template - auto visit(F&& f, T&&... v) + VisitReturnType visit(F&& f, T&&... v) { return std::visit([&](auto*... ptr) { return std::forward(f)(*ptr...); }, std::forward(v).mVariant...); }