common,yuzu-qt: Avoid explicit instantiation on old clang

Clang versions < 15 have compile issues with explicit instantiation.
Disable it for these versions.
This commit is contained in:
lat9nq 2023-06-18 19:57:14 -04:00
parent c2b577b364
commit a7a32ab8a0
6 changed files with 22 additions and 3 deletions

View file

@ -235,6 +235,12 @@ if (WIN32 AND YUZU_CRASH_DUMPS)
target_compile_definitions(yuzu PRIVATE -DYUZU_DBGHELP)
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_definitions(yuzu PRIVATE
$<$<VERSION_LESS:$<CXX_COMPILER_VERSION>,15>:_CANNOT_EXPLICITLY_INSTANTIATE>
)
endif()
file(GLOB COMPAT_LIST
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)

View file

@ -3,6 +3,7 @@
#include "yuzu/uisettings.h"
#ifndef _CANNOT_EXPLICITLY_INSTANTIATE
namespace Settings {
template class Setting<bool>;
template class Setting<std::string>;
@ -12,6 +13,7 @@ template class Setting<u8, true>;
template class Setting<u8>;
template class Setting<unsigned long long>;
} // namespace Settings
#endif
namespace UISettings {

View file

@ -17,6 +17,7 @@
using Settings::Category;
using Settings::Setting;
#ifndef _CANNOT_EXPLICITLY_INSTANTIATE
namespace Settings {
extern template class Setting<bool>;
extern template class Setting<std::string>;
@ -26,6 +27,7 @@ extern template class Setting<u8, true>;
extern template class Setting<u8>;
extern template class Setting<unsigned long long>;
} // namespace Settings
#endif
namespace UISettings {