Browse Source

Suppress another stupid warning happening with -std=c++17 and up.

Happens on GCC 14 as well, and likely on older also, but I never noticed
because I don't compile with those standards myself.
pull/660/merge
Vladimír Vondruš 11 months ago
parent
commit
be6926d781
  1. 14
      src/Magnum/ShaderTools/AbstractConverter.h
  2. 14
      src/Magnum/Text/AbstractFont.h
  3. 14
      src/Magnum/Trade/AbstractImporter.h

14
src/Magnum/ShaderTools/AbstractConverter.h

@ -1218,7 +1218,19 @@ template<class Callback, class T> void AbstractConverter::setInputFileCallback(C
/* Don't try to wrap a null function pointer. Need to cast first because
MSVC (even 2017) can't apply ! to a lambda. Ugh. */
const auto callbackPtr = static_cast<Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, T&)>(callback);
if(!callbackPtr) return setInputFileCallback(nullptr);
/* With -std=c++17 or higher enabled, GCC says that "warning: the address
of <a lambda> will never be NULL". Well of course it won't, but this
function can get also a null plain function pointer, it's a goddamn
template after all. Shut up. */
#if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && defined(CORRADE_TARGET_CXX17)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Waddress"
#endif
if(!callbackPtr)
return setInputFileCallback(nullptr);
#if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && defined(CORRADE_TARGET_CXX17)
#pragma GCC diagnostic pop
#endif
_inputFileCallbackTemplate = { reinterpret_cast<void(*)()>(callbackPtr), static_cast<const void*>(&userData) };
setInputFileCallback([](const std::string& filename, const InputFileCallbackPolicy flags, void* const userData) {

14
src/Magnum/Text/AbstractFont.h

@ -915,7 +915,19 @@ template<class Callback, class T> void AbstractFont::setFileCallback(Callback ca
/* Don't try to wrap a null function pointer. Need to cast first because
MSVC (even 2017) can't apply ! to a lambda. Ugh. */
const auto callbackPtr = static_cast<Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, T&)>(callback);
if(!callbackPtr) return setFileCallback(nullptr);
/* With -std=c++17 or higher enabled, GCC says that "warning: the address
of <a lambda> will never be NULL". Well of course it won't, but this
function can get also a null plain function pointer, it's a goddamn
template after all. Shut up. */
#if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && defined(CORRADE_TARGET_CXX17)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Waddress"
#endif
if(!callbackPtr)
return setFileCallback(nullptr);
#if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && defined(CORRADE_TARGET_CXX17)
#pragma GCC diagnostic pop
#endif
_fileCallbackTemplate = { reinterpret_cast<void(*)()>(callbackPtr), static_cast<const void*>(&userData) };
setFileCallback([](const std::string& filename, const InputFileCallbackPolicy flags, void* const userData) {

14
src/Magnum/Trade/AbstractImporter.h

@ -2654,7 +2654,19 @@ template<class Callback, class T> void AbstractImporter::setFileCallback(Callbac
/* Don't try to wrap a null function pointer. Need to cast first because
MSVC (even 2017) can't apply ! to a lambda. Ugh. */
const auto callbackPtr = static_cast<Containers::Optional<Containers::ArrayView<const char>>(*)(const std::string&, InputFileCallbackPolicy, T&)>(callback);
if(!callbackPtr) return setFileCallback(nullptr);
/* With -std=c++17 or higher enabled, GCC says that "warning: the address
of <a lambda> will never be NULL". Well of course it won't, but this
function can get also a null plain function pointer, it's a goddamn
template after all. Shut up. */
#if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && defined(CORRADE_TARGET_CXX17)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Waddress"
#endif
if(!callbackPtr)
return setFileCallback(nullptr);
#if defined(CORRADE_TARGET_GCC) && !defined(CORRADE_TARGET_CLANG) && defined(CORRADE_TARGET_CXX17)
#pragma GCC diagnostic pop
#endif
_fileCallbackTemplate = { reinterpret_cast<void(*)()>(callbackPtr), static_cast<const void*>(&userData) };
setFileCallback([](const std::string& filename, const InputFileCallbackPolicy flags, void* const userData) {

Loading…
Cancel
Save