--- a/include/sol/optional_implementation.hpp +++ b/include/sol/optional_implementation.hpp @@ -2189,7 +2189,10 @@ template T& emplace(Args&&... args) noexcept { static_assert(std::is_constructible::value, "T must be constructible with Args"); *this = nullopt; - this->construct(std::forward(args)...); + // Reference specialization stores a pointer; set it directly. + // construct() only exists in the non-reference specialization. + m_value = std::addressof(std::forward(args)...); + return *m_value; }