--- a/include/sol/optional_implementation.hpp
+++ b/include/sol/optional_implementation.hpp
@@ -2189,7 +2189,10 @@
 		template <class... Args>
 		T& emplace(Args&&... args) noexcept {
 			static_assert(std::is_constructible<T, Args&&...>::value, "T must be constructible with Args");

 			*this = nullopt;
-			this->construct(std::forward<Args>(args)...);
+			// Reference specialization stores a pointer; set it directly.
+			// construct() only exists in the non-reference specialization.
+			m_value = std::addressof(std::forward<Args>(args)...);
+			return *m_value;
 		}
