diff options
author | 2021-09-28 19:48:10 +1000 | |
---|---|---|
committer | 2021-09-28 19:48:10 +1000 | |
commit | 9c9b2f30bb67deefbfd869138e66d24bf277ebf1 (patch) | |
tree | e80413b96c44804155c20fc973b90f8939a8b1e9 /src/emu/validity.cpp | |
parent | 925646674ca492fcf01b3866085eb4cc734ee6fe (diff) | |
parent | 6b1057f205525c2de070b7002f91e063d5f6d074 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/emu/validity.cpp')
-rw-r--r-- | src/emu/validity.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp index 31a89b5ce1a..590f4faccac 100644 --- a/src/emu/validity.cpp +++ b/src/emu/validity.cpp @@ -47,10 +47,12 @@ using test_delegate = delegate<char (void const *&)>; // type //------------------------------------------------- +#if !defined(_LIBCPP_VERSION) || (_LIBCPP_VERSION >= 7000) test_delegate make_diamond_class_delegate(char (diamond_inheritance::*func)(void const *&), diamond_inheritance *obj) { return test_delegate(func, obj); } +#endif // !defined(_LIBCPP_VERSION) || (_LIBCPP_VERSION >= 7000) //------------------------------------------------- @@ -1391,6 +1393,7 @@ void validate_delegates_mfp() if (&o != addr) osd_printf_error("Error testing delegate this pointer adjustment for virtual member function through base class pointer %p -> %p (expected %p)\n", static_cast<void const *>(static_cast<base_b *>(&o)), addr, static_cast<void const *>(&o)); +#if !defined(_LIBCPP_VERSION) || (_LIBCPP_VERSION >= 7000) // test creating delegates for a forward-declared class cb1 = make_diamond_class_delegate(&diamond_inheritance::get_derived_a, &d); cb2 = make_diamond_class_delegate(&diamond_inheritance::get_derived_b, &d); @@ -1409,8 +1412,8 @@ void validate_delegates_mfp() if (static_cast<virtual_derived_b *>(&d) != addr) osd_printf_error("Error testing delegate this pointer adjustment for incomplete class %p -> %p (expected %p)\n", static_cast<void const *>(&d), addr, static_cast<void const *>(static_cast<virtual_derived_b *>(&d))); +#if defined(_MSC_VER) && !defined(__clang__) // test MSVC extension allowing casting member pointer types across virtual inheritance relationships -#if defined(_MSC_VER) cb1 = make_diamond_class_delegate(&diamond_inheritance::get_base, &d); addr = nullptr; @@ -1419,7 +1422,8 @@ void validate_delegates_mfp() osd_printf_error("Error testing delegate non-virtual member function dispatch for incomplete class\n"); if (static_cast<virtual_base *>(&d) != addr) osd_printf_error("Error testing delegate this pointer adjustment for incomplete class %p -> %p (expected %p)\n", static_cast<void const *>(&d), addr, static_cast<void const *>(static_cast<virtual_base *>(&d))); -#endif // defined(_MSC_VER) +#endif // defined(_MSC_VER) && !defined(__clang__) +#endif // !defined(_LIBCPP_VERSION) || (_LIBCPP_VERSION >= 7000) } |