mirror of
https://github.com/fmtlib/fmt.git
synced 2024-11-07 17:41:11 +00:00
29c10fbf6e
* Update format.cc As the explicit instantiation *declaration* of `internal::basic_data<void>` in format.h, this explicit instantiation *definition* should mirror FMT_API also. * Mirror visibility of explicit instantiation declaration explicit instantiation declaration of internal::basic_data<void> should mirror visibility of FMT_API * Eliminate `__declspec(dllexport)` designation on extern template internal::basic_data<> when `extern` affected during exporting phase. * Add `FMT_EXTERN_TEMPLATE_API` for designate DLL export `extern template` When exporting DLL, do not designate `__declspec(dllexport)` any template that has any explicit class template declaration a.k.a. `extern template`. Instead, designate `__declspec(dllexport)` at single point where we have explicit class template definition a.k.a. normal instantiation without `extern` Note: this is a c++11 feature. * Delete whole `FMT_USE_EXTERN_TEMPLATES` block and its condition 1. Remove whole `FMT_USE_EXTERN_TEMPLATES` block (trailing `FMT_UDL_TEMPLATE` block) ```` #ifndef FMT_USE_EXTERN_TEMPLATES # ifndef FMT_HEADER_ONLY # define FMT_USE_EXTERN_TEMPLATES \ ((FMT_CLANG_VERSION >= 209 && __cplusplus >= 201103L) || \ (FMT_GCC_VERSION >= 303 && FMT_HAS_GXX_CXX11)) # else # define FMT_USE_EXTERN_TEMPLATES 0 # endif #endif ```` 2. Delete `FMT_USE_EXTERN_TEMPLATES` condition, only condition, that trailing basic_data class template definition. ```` #if FMT_USE_EXTERN_TEMPLATES extern template struct basic_data<void>; #endif ```` 3. Replace `FMT_API` with new `FMT_EXTERN_TEMPLATE_API` added in `core.h` for sake of extern template of `basic_data<void>` * Add `#define FMT_EXTERN extern` only when not `FMT_HEADER_ONLY` * Replace `extern` on basic_data<void> with the `FMT_EXTERN` condition in core.h * replace misspelled if !define() with ifndef |
||
---|---|---|
.. | ||
fmt | ||
format |