From 2800d66712ff991caed9c7eff708c710d7aa52fa Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Wed, 15 Apr 2015 08:16:16 -0700 Subject: [PATCH] Convert compile-time checks to use static_assert. Fixes unused-local-typedefs warnings when checks pass. --- core/sourcehook/FastDelegate.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/core/sourcehook/FastDelegate.h b/core/sourcehook/FastDelegate.h index a515f65..8c1cbe5 100644 --- a/core/sourcehook/FastDelegate.h +++ b/core/sourcehook/FastDelegate.h @@ -178,8 +178,8 @@ inline OutputClass horrible_cast(const InputClass input){ // Cause a compile-time error if in, out and u are not the same size. // If the compile fails here, it means the compiler has peculiar // unions which would prevent the cast from working. - typedef int ERROR_CantUseHorrible_cast[sizeof(InputClass)==sizeof(u) - && sizeof(InputClass)==sizeof(OutputClass) ? 1 : -1]; + static_assert(sizeof(InputClass)==sizeof(u) && sizeof(InputClass)==sizeof(OutputClass), + "Can't use horrible cast"); u.in = input; return u.out; } @@ -294,8 +294,7 @@ struct SimplifyMemFunc { inline static GenericClass *Convert(X *pthis, XFuncType function_to_bind, GenericMemFuncType &bound_func) { // Unsupported member function type -- force a compile failure. - // (it's illegal to have a array with negative size). - typedef char ERROR_Unsupported_member_function_pointer_on_this_compiler[N-100]; + static_assert(N >= 100, "Unsupported memeber function pointer on this compiler"); return 0; } }; @@ -352,7 +351,7 @@ struct SimplifyMemFunc< SINGLE_MEMFUNCPTR_SIZE + sizeof(int) > { }s; } u; // Check that the horrible_cast will work - typedef int ERROR_CantUsehorrible_cast[sizeof(function_to_bind)==sizeof(u.s)? 1 : -1]; + static_assert(sizeof(function_to_bind)==sizeof(u.s), "Can't use horrible cast"); u.func = function_to_bind; bound_func = u.s.funcaddress; return reinterpret_cast(reinterpret_cast(pthis) + u.s.delta); @@ -409,9 +408,10 @@ struct SimplifyMemFunc MicrosoftVirtualMFP s; } u2; // Check that the horrible_cast<>s will work - typedef int ERROR_CantUsehorrible_cast[sizeof(function_to_bind)==sizeof(u.s) + static_assert(sizeof(function_to_bind)==sizeof(u.s) && sizeof(function_to_bind)==sizeof(u.ProbeFunc) - && sizeof(u2.virtfunc)==sizeof(u2.s) ? 1 : -1]; + && sizeof(u2.virtfunc)==sizeof(u2.s), + "Can't use horrible cast."); // Unfortunately, taking the address of a MF prevents it from being inlined, so // this next line can't be completely optimised away by the compiler. u2.virtfunc = &GenericVirtualClass::GetThis; @@ -455,7 +455,7 @@ struct SimplifyMemFunc // We can generate correct code in this case. To prevent an incorrect call from // ever being made, on MSVC6 we generate a warning, and call a function to // make the program crash instantly. - typedef char ERROR_VC6CompilerBug[-100]; + static_assert(true, "VC6 Compiler Bug"); return 0; } }; @@ -487,7 +487,7 @@ struct SimplifyMemFunc } s; } u; // Check that the horrible_cast will work - typedef int ERROR_CantUsehorrible_cast[sizeof(XFuncType)==sizeof(u.s)? 1 : -1]; + static_assert(sizeof(XFuncType)==sizeof(u.s), "Can't use horrible cast."); u.func = function_to_bind; bound_func = u.s.funcaddress; int virtual_delta = 0; @@ -781,7 +781,7 @@ public: // Ensure that there's a compilation failure if function pointers // and data pointers have different sizes. // If you get this error, you need to #undef FASTDELEGATE_USESTATICFUNCTIONHACK. - typedef int ERROR_CantUseEvilMethod[sizeof(GenericClass *)==sizeof(function_to_bind) ? 1 : -1]; + static_assert(sizeof(GenericClass *)==sizeof(function_to_bind), "Can't use evil method."); m_pthis = horrible_cast(function_to_bind); // MSVC, SunC++ and DMC accept the following (non-standard) code: // m_pthis = static_cast(static_cast(function_to_bind)); @@ -796,7 +796,7 @@ public: // Ensure that there's a compilation failure if function pointers // and data pointers have different sizes. // If you get this error, you need to #undef FASTDELEGATE_USESTATICFUNCTIONHACK. - typedef int ERROR_CantUseEvilMethod[sizeof(UnvoidStaticFuncPtr)==sizeof(this) ? 1 : -1]; + static_assert(sizeof(UnvoidStaticFuncPtr)==sizeof(this), "Can't use evil method."); return horrible_cast(this); } #endif // !defined(FASTDELEGATE_USESTATICFUNCTIONHACK)