Browse Source

try Fixing Variant workaround

Kiro 8 months ago
parent
commit
52ee437d7e
1 changed files with 1 additions and 32 deletions
  1. 1 32
      core/object/make_virtuals.py

+ 1 - 32
core/object/make_virtuals.py

@@ -127,7 +127,7 @@ def generate_version(argcount, const=False, returns=False, required=False):
             callptrargsptr += ", "
             callptrargsptr += ", "
         argtext += f"m_type{i + 1}"
         argtext += f"m_type{i + 1}"
         callargtext += f"m_type{i + 1} arg{i + 1}"
         callargtext += f"m_type{i + 1} arg{i + 1}"
-        callsiargs += f"_to_variant(arg{i + 1})"
+        callsiargs += f"arg{i + 1}"
         callsiargptrs += f"&vargs[{i}]"
         callsiargptrs += f"&vargs[{i}]"
         callptrargs += (
         callptrargs += (
             f"PtrToArg<m_type{i + 1}>::EncodeT argval{i + 1} = (PtrToArg<m_type{i + 1}>::EncodeT)arg{i + 1};\\\n"
             f"PtrToArg<m_type{i + 1}>::EncodeT argval{i + 1} = (PtrToArg<m_type{i + 1}>::EncodeT)arg{i + 1};\\\n"
@@ -200,37 +200,6 @@ def run(target, source, env):
 #define GDVIRTUAL_TRACK(m_virtual, m_initialized)
 #define GDVIRTUAL_TRACK(m_virtual, m_initialized)
 #endif
 #endif
 
 
-// MSVC WORKAROUND START
-// FIXME The below helper functions are needed to work around an MSVC bug.
-// They should be removed (by modifying core/object/make_virtuals.py) once the bug ceases to be triggered.
-// The bug is triggered by the following code:
-// `Variant(arg)`
-// Through the introduction of the move constructor, MSVC forgets that `operator Variant()`
-// is also a valid way to resolve this call. So for some argument types, it fails the call because
-// it cannot convert to `Variant`.
-// The function `_to_variant` helps the compiler select `.operator Variant()` for appropriate arguments using SFINAE.
-
-template <typename T, typename = void>
-struct has_variant_operator : std::false_type {};
-
-template <typename T>
-struct has_variant_operator<T, std::void_t<decltype(std::declval<T>().operator Variant())>> : std::true_type {};
-
-// Function that is enabled if T has `.operator Variant()`.
-template <typename T>
-_ALWAYS_INLINE_ typename std::enable_if<has_variant_operator<T>::value, Variant>::type
-_to_variant(T&& t) {
-    return std::forward<T>(t).operator Variant();
-}
-
-// Function that is enabled if T does not have `.operator Variant()`.
-template <typename T>
-_ALWAYS_INLINE_ typename std::enable_if<!has_variant_operator<T>::value, Variant>::type
-_to_variant(T&& t) {
-    return Variant(std::forward<T>(t));
-}
-// MSVC WORKAROUND END
-
 """
 """
 
 
     for i in range(max_versions + 1):
     for i in range(max_versions + 1):