diff --git a/include/fmt/core.h b/include/fmt/core.h index 5aefcc14..32bc88e3 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -185,11 +185,20 @@ # define FMT_CLASS_API #endif #ifndef FMT_API -# define FMT_API +# if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_API __attribute__((visibility("default"))) +# define FMT_EXTERN_TEMPLATE_API FMT_API +# define FMT_INSTANTIATION_DEF_API +# else +# define FMT_API +# endif #endif #ifndef FMT_EXTERN_TEMPLATE_API # define FMT_EXTERN_TEMPLATE_API #endif +#ifndef FMT_INSTANTIATION_DEF_API +# define FMT_INSTANTIATION_DEF_API FMT_API +#endif #ifndef FMT_HEADER_ONLY # define FMT_EXTERN extern diff --git a/src/format.cc b/src/format.cc index e6fde7c3..9a9abf8d 100644 --- a/src/format.cc +++ b/src/format.cc @@ -121,7 +121,7 @@ template FMT_API char* internal::sprintf_format(long double, internal::buffer&, sprintf_specs); -template struct FMT_API internal::basic_data; +template struct FMT_INSTANTIATION_DEF_API internal::basic_data; // Workaround a bug in MSVC2013 that prevents instantiation of format_float. int (*instantiate_format_float)(double, int, internal::float_specs,