Skip to content

Commit a8b1253

Browse files
committed
[libc++] Remove _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS and _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
1 parent faefb70 commit a8b1253

File tree

13 files changed

+132
-164
lines changed

13 files changed

+132
-164
lines changed

libcxx/.clang-format

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ AttributeMacros: [
3333
'_LIBCPP_DISABLE_EXTENSION_WARNING',
3434
'_LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION',
3535
'_LIBCPP_EXPORTED_FROM_ABI',
36-
'_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS',
3736
'_LIBCPP_FALLTHROUGH',
3837
'_LIBCPP_HIDDEN',
3938
'_LIBCPP_HIDE_FROM_ABI_AFTER_V1',

libcxx/docs/DesignDocs/VisibilityMacros.rst

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -75,36 +75,6 @@ Visibility Macros
7575
**Windows Behavior**: DLLs do not support dllimport/export on class templates.
7676
The macro has an empty definition on this platform.
7777

78-
**_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS**
79-
Mark the member functions, typeinfo, and vtable of the type named in
80-
an extern template declaration as being exported by the libc++ library.
81-
This attribute must be specified on all extern class template declarations.
82-
83-
This macro is used to override the `_LIBCPP_TEMPLATE_VIS` attribute
84-
specified on the primary template and to export the member functions produced
85-
by the explicit instantiation in the dylib.
86-
87-
**Windows Behavior**: `extern template` and `dllexport` are fundamentally
88-
incompatible *on a class template* on Windows; the former suppresses
89-
instantiation, while the latter forces it. Specifying both on the same
90-
declaration makes the class template be instantiated, which is not desirable
91-
inside headers. This macro therefore expands to `dllimport` outside of libc++
92-
but nothing inside of it (rather than expanding to `dllexport`); instead, the
93-
explicit instantiations themselves are marked as exported. Note that this
94-
applies *only* to extern *class* templates. Extern *function* templates obey
95-
regular import/export semantics, and applying `dllexport` directly to the
96-
extern template declaration (i.e. using `_LIBCPP_FUNC_VIS`) is the correct
97-
thing to do for them.
98-
99-
**_LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS**
100-
Mark the member functions, typeinfo, and vtable of an explicit instantiation
101-
of a class template as being exported by the libc++ library. This attribute
102-
must be specified on all class template explicit instantiations.
103-
104-
It is only necessary to mark the explicit instantiation itself (as opposed to
105-
the extern template declaration) as exported on Windows, as discussed above.
106-
On all other platforms, this macro has an empty definition.
107-
10878
**_LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS**
10979
Mark a symbol as hidden so it will not be exported from shared libraries. This
11080
is intended specifically for method templates of either classes marked with

libcxx/include/__config

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -363,23 +363,12 @@ typedef __char32_t char32_t;
363363
# endif
364364

365365
# if defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS) || (defined(__MINGW32__) && !defined(_LIBCPP_BUILDING_LIBRARY))
366-
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
367-
# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
368366
# define _LIBCPP_OVERRIDABLE_FUNC_VIS
369367
# define _LIBCPP_EXPORTED_FROM_ABI
370368
# elif defined(_LIBCPP_BUILDING_LIBRARY)
371-
# if defined(__MINGW32__)
372-
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __declspec(dllexport)
373-
# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
374-
# else
375-
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS
376-
# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS __declspec(dllexport)
377-
# endif
378369
# define _LIBCPP_OVERRIDABLE_FUNC_VIS __declspec(dllexport)
379370
# define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllexport)
380371
# else
381-
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __declspec(dllimport)
382-
# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
383372
# define _LIBCPP_OVERRIDABLE_FUNC_VIS
384373
# define _LIBCPP_EXPORTED_FROM_ABI __declspec(dllimport)
385374
# endif
@@ -401,8 +390,6 @@ typedef __char32_t char32_t;
401390
# define _LIBCPP_HIDDEN _LIBCPP_VISIBILITY("hidden")
402391
# define _LIBCPP_TEMPLATE_DATA_VIS _LIBCPP_VISIBILITY("default")
403392
# define _LIBCPP_EXPORTED_FROM_ABI _LIBCPP_VISIBILITY("default")
404-
# define _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS _LIBCPP_VISIBILITY("default")
405-
# define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
406393

407394
// TODO: Make this a proper customization point or remove the option to override it.
408395
# ifndef _LIBCPP_OVERRIDABLE_FUNC_VIS
@@ -553,6 +540,17 @@ typedef __char32_t char32_t;
553540
# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++2b-extensions")
554541
# endif
555542

543+
# if __has_warning("-Wdllexport-explicit-instantiation")
544+
# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORE_DLLEXPORT \
545+
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdllexport-explicit-instantiation")
546+
# elif defined(_LIBCPP_OBJECT_FORMAT_COFF)
547+
# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORE_DLLEXPORT \
548+
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wignored-attributes") \
549+
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdllexport-explicit-instantiation-decl")
550+
# else
551+
# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORE_DLLEXPORT
552+
# endif
553+
556554
// Clang modules take a significant compile time hit when pushing and popping diagnostics.
557555
// Since all the headers are marked as system headers in the modulemap, we can simply disable this
558556
// pushing and popping when building with clang modules.
@@ -564,6 +562,7 @@ typedef __char32_t char32_t;
564562
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \
565563
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \
566564
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION \
565+
_LIBCPP_CLANG_DIAGNOSTIC_IGNORE_DLLEXPORT \
567566
_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \
568567
_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \
569568
_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \

libcxx/include/__locale

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,9 @@ long collate<_CharT>::do_hash(const char_type* __lo, const char_type* __hi) cons
237237
return static_cast<long>(__h);
238238
}
239239

240-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS collate<char>;
240+
extern template class _LIBCPP_EXPORTED_FROM_ABI collate<char>;
241241
#if _LIBCPP_HAS_WIDE_CHARACTERS
242-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS collate<wchar_t>;
242+
extern template class _LIBCPP_EXPORTED_FROM_ABI collate<wchar_t>;
243243
#endif
244244

245245
// template <class CharT> class collate_byname;
@@ -1251,17 +1251,17 @@ template <class _InternT, class _ExternT, class _StateT>
12511251
codecvt_byname<_InternT, _ExternT, _StateT>::~codecvt_byname() {}
12521252
_LIBCPP_SUPPRESS_DEPRECATED_POP
12531253

1254-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char, char, mbstate_t>;
1254+
extern template class _LIBCPP_EXPORTED_FROM_ABI codecvt_byname<char, char, mbstate_t>;
12551255
#if _LIBCPP_HAS_WIDE_CHARACTERS
1256-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<wchar_t, char, mbstate_t>;
1256+
extern template class _LIBCPP_EXPORTED_FROM_ABI codecvt_byname<wchar_t, char, mbstate_t>;
12571257
#endif
12581258
extern template class _LIBCPP_DEPRECATED_IN_CXX20
1259-
_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char16_t, char, mbstate_t>; // deprecated in C++20
1259+
_LIBCPP_EXPORTED_FROM_ABI codecvt_byname<char16_t, char, mbstate_t>; // deprecated in C++20
12601260
extern template class _LIBCPP_DEPRECATED_IN_CXX20
1261-
_LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char32_t, char, mbstate_t>; // deprecated in C++20
1261+
_LIBCPP_EXPORTED_FROM_ABI codecvt_byname<char32_t, char, mbstate_t>; // deprecated in C++20
12621262
#if _LIBCPP_HAS_CHAR8_T
1263-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char16_t, char8_t, mbstate_t>; // C++20
1264-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS codecvt_byname<char32_t, char8_t, mbstate_t>; // C++20
1263+
extern template class _LIBCPP_EXPORTED_FROM_ABI codecvt_byname<char16_t, char8_t, mbstate_t>; // C++20
1264+
extern template class _LIBCPP_EXPORTED_FROM_ABI codecvt_byname<char32_t, char8_t, mbstate_t>; // C++20
12651265
#endif
12661266

12671267
template <size_t _Np>

libcxx/include/__ostream/basic_ostream.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -665,9 +665,9 @@ basic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const ch
665665

666666
# endif // _LIBCPP_STD_VER >= 20
667667

668-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>;
668+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_ostream<char>;
669669
# if _LIBCPP_HAS_WIDE_CHARACTERS
670-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>;
670+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_ostream<wchar_t>;
671671
# endif
672672

673673
_LIBCPP_END_NAMESPACE_STD

libcxx/include/fstream

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,9 +1563,9 @@ inline void basic_fstream<_CharT, _Traits>::close() {
15631563
}
15641564

15651565
# if _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1
1566-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ifstream<char>;
1567-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ofstream<char>;
1568-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_filebuf<char>;
1566+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_ifstream<char>;
1567+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_ofstream<char>;
1568+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_filebuf<char>;
15691569
# endif
15701570

15711571
_LIBCPP_END_NAMESPACE_STD

libcxx/include/ios

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,10 +745,10 @@ inline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::set_rdbuf(basic_st
745745
ios_base::set_rdbuf(__sb);
746746
}
747747

748-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<char>;
748+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_ios<char>;
749749

750750
# if _LIBCPP_HAS_WIDE_CHARACTERS
751-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<wchar_t>;
751+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_ios<wchar_t>;
752752
# endif
753753

754754
_LIBCPP_HIDE_FROM_ABI inline ios_base& boolalpha(ios_base& __str) {

libcxx/include/istream

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,11 +1365,11 @@ operator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x) {
13651365
return __is;
13661366
}
13671367

1368-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_istream<char>;
1368+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_istream<char>;
13691369
# if _LIBCPP_HAS_WIDE_CHARACTERS
1370-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_istream<wchar_t>;
1370+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_istream<wchar_t>;
13711371
# endif
1372-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_iostream<char>;
1372+
extern template class _LIBCPP_EXPORTED_FROM_ABI basic_iostream<char>;
13731373

13741374
_LIBCPP_END_NAMESPACE_STD
13751375

libcxx/include/locale

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -561,9 +561,9 @@ int __num_get<_CharT>::__stage2_float_loop(
561561
return 0;
562562
}
563563

564-
extern template struct _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __num_get<char>;
564+
extern template struct _LIBCPP_EXPORTED_FROM_ABI __num_get<char>;
565565
# if _LIBCPP_HAS_WIDE_CHARACTERS
566-
extern template struct _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __num_get<wchar_t>;
566+
extern template struct _LIBCPP_EXPORTED_FROM_ABI __num_get<wchar_t>;
567567
# endif
568568

569569
template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> >
@@ -1042,9 +1042,9 @@ _InputIterator num_get<_CharT, _InputIterator>::do_get(
10421042
return __b;
10431043
}
10441044

1045-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS num_get<char>;
1045+
extern template class _LIBCPP_EXPORTED_FROM_ABI num_get<char>;
10461046
# if _LIBCPP_HAS_WIDE_CHARACTERS
1047-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS num_get<wchar_t>;
1047+
extern template class _LIBCPP_EXPORTED_FROM_ABI num_get<wchar_t>;
10481048
# endif
10491049

10501050
struct _LIBCPP_EXPORTED_FROM_ABI __num_put_base {
@@ -1160,9 +1160,9 @@ void __num_put<_CharT>::__widen_and_group_float(
11601160
__op = __ob + (__np - __nb);
11611161
}
11621162

1163-
extern template struct _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __num_put<char>;
1163+
extern template struct _LIBCPP_EXPORTED_FROM_ABI __num_put<char>;
11641164
# if _LIBCPP_HAS_WIDE_CHARACTERS
1165-
extern template struct _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __num_put<wchar_t>;
1165+
extern template struct _LIBCPP_EXPORTED_FROM_ABI __num_put<wchar_t>;
11661166
# endif
11671167

11681168
template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
@@ -1387,9 +1387,9 @@ num_put<_CharT, _OutputIterator>::do_put(iter_type __s, ios_base& __iob, char_ty
13871387
return std::__pad_and_output(__s, __o, __op, __oe, __iob, __fl);
13881388
}
13891389

1390-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS num_put<char>;
1390+
extern template class _LIBCPP_EXPORTED_FROM_ABI num_put<char>;
13911391
# if _LIBCPP_HAS_WIDE_CHARACTERS
1392-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS num_put<wchar_t>;
1392+
extern template class _LIBCPP_EXPORTED_FROM_ABI num_put<wchar_t>;
13931393
# endif
13941394

13951395
template <class _CharT, class _InputIterator>
@@ -1923,9 +1923,9 @@ _InputIterator time_get<_CharT, _InputIterator>::do_get(
19231923
return __b;
19241924
}
19251925

1926-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_get<char>;
1926+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_get<char>;
19271927
# if _LIBCPP_HAS_WIDE_CHARACTERS
1928-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_get<wchar_t>;
1928+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_get<wchar_t>;
19291929
# endif
19301930

19311931
class _LIBCPP_EXPORTED_FROM_ABI __time_get {
@@ -2019,9 +2019,9 @@ private:
20192019
_LIBCPP_HIDE_FROM_ABI_VIRTUAL const string_type& __X() const override { return this->__X_; }
20202020
};
20212021

2022-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_get_byname<char>;
2022+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_get_byname<char>;
20232023
# if _LIBCPP_HAS_WIDE_CHARACTERS
2024-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_get_byname<wchar_t>;
2024+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_get_byname<wchar_t>;
20252025
# endif
20262026

20272027
class _LIBCPP_EXPORTED_FROM_ABI __time_put {
@@ -2108,9 +2108,9 @@ _OutputIterator time_put<_CharT, _OutputIterator>::do_put(
21082108
return std::copy(__nb, __ne, __s);
21092109
}
21102110

2111-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_put<char>;
2111+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_put<char>;
21122112
# if _LIBCPP_HAS_WIDE_CHARACTERS
2113-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_put<wchar_t>;
2113+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_put<wchar_t>;
21142114
# endif
21152115

21162116
template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
@@ -2126,9 +2126,9 @@ protected:
21262126
_LIBCPP_HIDE_FROM_ABI_VIRTUAL ~time_put_byname() override {}
21272127
};
21282128

2129-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_put_byname<char>;
2129+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_put_byname<char>;
21302130
# if _LIBCPP_HAS_WIDE_CHARACTERS
2131-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS time_put_byname<wchar_t>;
2131+
extern template class _LIBCPP_EXPORTED_FROM_ABI time_put_byname<wchar_t>;
21322132
# endif
21332133

21342134
// money_base
@@ -2192,11 +2192,11 @@ locale::id moneypunct<_CharT, _International>::id;
21922192
template <class _CharT, bool _International>
21932193
const bool moneypunct<_CharT, _International>::intl;
21942194

2195-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct<char, false>;
2196-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct<char, true>;
2195+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct<char, false>;
2196+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct<char, true>;
21972197
# if _LIBCPP_HAS_WIDE_CHARACTERS
2198-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct<wchar_t, false>;
2199-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct<wchar_t, true>;
2198+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct<wchar_t, false>;
2199+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct<wchar_t, true>;
22002200
# endif
22012201

22022202
// moneypunct_byname
@@ -2249,16 +2249,16 @@ template <>
22492249
_LIBCPP_EXPORTED_FROM_ABI void moneypunct_byname<char, false>::init(const char*);
22502250
template <>
22512251
_LIBCPP_EXPORTED_FROM_ABI void moneypunct_byname<char, true>::init(const char*);
2252-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct_byname<char, false>;
2253-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct_byname<char, true>;
2252+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct_byname<char, false>;
2253+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct_byname<char, true>;
22542254

22552255
# if _LIBCPP_HAS_WIDE_CHARACTERS
22562256
template <>
22572257
_LIBCPP_EXPORTED_FROM_ABI void moneypunct_byname<wchar_t, false>::init(const char*);
22582258
template <>
22592259
_LIBCPP_EXPORTED_FROM_ABI void moneypunct_byname<wchar_t, true>::init(const char*);
2260-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct_byname<wchar_t, false>;
2261-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS moneypunct_byname<wchar_t, true>;
2260+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct_byname<wchar_t, false>;
2261+
extern template class _LIBCPP_EXPORTED_FROM_ABI moneypunct_byname<wchar_t, true>;
22622262
# endif
22632263

22642264
// money_get
@@ -2319,9 +2319,9 @@ void __money_get<_CharT>::__gather_info(
23192319
}
23202320
}
23212321

2322-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __money_get<char>;
2322+
extern template class _LIBCPP_EXPORTED_FROM_ABI __money_get<char>;
23232323
# if _LIBCPP_HAS_WIDE_CHARACTERS
2324-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __money_get<wchar_t>;
2324+
extern template class _LIBCPP_EXPORTED_FROM_ABI __money_get<wchar_t>;
23252325
# endif
23262326

23272327
template <class _CharT, class _InputIterator = istreambuf_iterator<_CharT> >
@@ -2633,9 +2633,9 @@ _InputIterator money_get<_CharT, _InputIterator>::do_get(
26332633
return __b;
26342634
}
26352635

2636-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS money_get<char>;
2636+
extern template class _LIBCPP_EXPORTED_FROM_ABI money_get<char>;
26372637
# if _LIBCPP_HAS_WIDE_CHARACTERS
2638-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS money_get<wchar_t>;
2638+
extern template class _LIBCPP_EXPORTED_FROM_ABI money_get<wchar_t>;
26392639
# endif
26402640

26412641
// money_put
@@ -2811,9 +2811,9 @@ void __money_put<_CharT>::__format(
28112811
__mi = __mb;
28122812
}
28132813

2814-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __money_put<char>;
2814+
extern template class _LIBCPP_EXPORTED_FROM_ABI __money_put<char>;
28152815
# if _LIBCPP_HAS_WIDE_CHARACTERS
2816-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS __money_put<wchar_t>;
2816+
extern template class _LIBCPP_EXPORTED_FROM_ABI __money_put<wchar_t>;
28172817
# endif
28182818

28192819
template <class _CharT, class _OutputIterator = ostreambuf_iterator<_CharT> >
@@ -2957,9 +2957,9 @@ _OutputIterator money_put<_CharT, _OutputIterator>::do_put(
29572957
return std::__pad_and_output(__s, __mb, __mi, __me, __iob, __fl);
29582958
}
29592959

2960-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS money_put<char>;
2960+
extern template class _LIBCPP_EXPORTED_FROM_ABI money_put<char>;
29612961
# if _LIBCPP_HAS_WIDE_CHARACTERS
2962-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS money_put<wchar_t>;
2962+
extern template class _LIBCPP_EXPORTED_FROM_ABI money_put<wchar_t>;
29632963
# endif
29642964

29652965
// messages
@@ -3042,9 +3042,9 @@ void messages<_CharT>::do_close(catalog __c) const {
30423042
# endif // _LIBCPP_HAS_CATOPEN
30433043
}
30443044

3045-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS messages<char>;
3045+
extern template class _LIBCPP_EXPORTED_FROM_ABI messages<char>;
30463046
# if _LIBCPP_HAS_WIDE_CHARACTERS
3047-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS messages<wchar_t>;
3047+
extern template class _LIBCPP_EXPORTED_FROM_ABI messages<wchar_t>;
30483048
# endif
30493049

30503050
template <class _CharT>
@@ -3061,9 +3061,9 @@ protected:
30613061
_LIBCPP_HIDE_FROM_ABI_VIRTUAL ~messages_byname() override {}
30623062
};
30633063

3064-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS messages_byname<char>;
3064+
extern template class _LIBCPP_EXPORTED_FROM_ABI messages_byname<char>;
30653065
# if _LIBCPP_HAS_WIDE_CHARACTERS
3066-
extern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS messages_byname<wchar_t>;
3066+
extern template class _LIBCPP_EXPORTED_FROM_ABI messages_byname<wchar_t>;
30673067
# endif
30683068

30693069
# if _LIBCPP_STD_VER < 26 || defined(_LIBCPP_ENABLE_CXX26_REMOVED_WSTRING_CONVERT)

0 commit comments

Comments
 (0)