diff --git a/include/__hash_table b/include/__hash_table index 3c39ac7e..ba04b3e5 100644 --- a/include/__hash_table +++ b/include/__hash_table @@ -80,9 +80,9 @@ __next_pow2(size_t __n) } template class __hash_table; -template class __hash_const_iterator; -template class __hash_map_iterator; -template class __hash_map_const_iterator; +template class _LIBCPP_VISIBLE __hash_const_iterator; +template class _LIBCPP_VISIBLE __hash_map_iterator; +template class _LIBCPP_VISIBLE __hash_map_const_iterator; template class _LIBCPP_VISIBLE unordered_map; diff --git a/include/__locale b/include/__locale index f23e0354..e6c357f9 100644 --- a/include/__locale +++ b/include/__locale @@ -31,17 +31,24 @@ _LIBCPP_BEGIN_NAMESPACE_STD -class locale; +class _LIBCPP_VISIBLE locale; -template bool has_facet(const locale&) _NOEXCEPT; -template const _Facet& use_facet(const locale&); +template +_LIBCPP_INLINE_VISIBILITY +bool +has_facet(const locale&) _NOEXCEPT; + +template +_LIBCPP_INLINE_VISIBILITY +const _Facet& +use_facet(const locale&); class _LIBCPP_VISIBLE locale { public: // types: - class facet; - class id; + class _LIBCPP_VISIBLE facet; + class _LIBCPP_VISIBLE id; typedef int category; static const category // values assigned here are for exposition only diff --git a/include/__tree b/include/__tree index f57c80c8..bd38b4f2 100644 --- a/include/__tree +++ b/include/__tree @@ -614,8 +614,8 @@ public: #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) }; -template class __map_iterator; -template class __map_const_iterator; +template class _LIBCPP_VISIBLE __map_iterator; +template class _LIBCPP_VISIBLE __map_const_iterator; template class _LIBCPP_VISIBLE __tree_iterator diff --git a/include/__tuple b/include/__tuple index 82168048..1fa90a00 100644 --- a/include/__tuple +++ b/include/__tuple @@ -79,38 +79,47 @@ template struct __tuple_like > : true_type template struct __tuple_like > : true_type {}; template +_LIBCPP_INLINE_VISIBILITY typename tuple_element<_Ip, tuple<_Tp...> >::type& get(tuple<_Tp...>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY const typename tuple_element<_Ip, tuple<_Tp...> >::type& get(const tuple<_Tp...>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY typename tuple_element<_Ip, tuple<_Tp...> >::type&& get(tuple<_Tp...>&&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY typename tuple_element<_Ip, pair<_T1, _T2> >::type& get(pair<_T1, _T2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY const typename tuple_element<_Ip, pair<_T1, _T2> >::type& get(const pair<_T1, _T2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY typename tuple_element<_Ip, pair<_T1, _T2> >::type&& get(pair<_T1, _T2>&&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY _Tp& get(array<_Tp, _Size>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY const _Tp& get(const array<_Tp, _Size>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY _Tp&& get(array<_Tp, _Size>&&) _NOEXCEPT; diff --git a/include/bitset b/include/bitset index 0c40b9b7..1167f504 100644 --- a/include/bitset +++ b/include/bitset @@ -626,7 +626,7 @@ __bitset<0, 0>::__bitset(unsigned long long) _NOEXCEPT { } -template class bitset; +template class _LIBCPP_VISIBLE bitset; template struct hash >; template diff --git a/include/exception b/include/exception index 2f527d90..5b75fb04 100644 --- a/include/exception +++ b/include/exception @@ -116,7 +116,7 @@ _LIBCPP_NORETURN _LIBCPP_VISIBLE void terminate() _NOEXCEPT; _LIBCPP_VISIBLE bool uncaught_exception() _NOEXCEPT; -class exception_ptr; +class _LIBCPP_VISIBLE exception_ptr; exception_ptr current_exception() _NOEXCEPT; _LIBCPP_NORETURN void rethrow_exception(exception_ptr); diff --git a/include/forward_list b/include/forward_list index 19f74847..404c6eb1 100644 --- a/include/forward_list +++ b/include/forward_list @@ -212,8 +212,8 @@ struct __forward_list_node value_type __value_; }; -template class forward_list; -template class __forward_list_const_iterator; +template class _LIBCPP_VISIBLE forward_list; +template class _LIBCPP_VISIBLE __forward_list_const_iterator; template class _LIBCPP_VISIBLE __forward_list_iterator @@ -225,8 +225,8 @@ class _LIBCPP_VISIBLE __forward_list_iterator _LIBCPP_INLINE_VISIBILITY explicit __forward_list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {} - template friend class forward_list; - template friend class __forward_list_const_iterator; + template friend class _LIBCPP_VISIBLE forward_list; + template friend class _LIBCPP_VISIBLE __forward_list_const_iterator; public: typedef forward_iterator_tag iterator_category; diff --git a/include/future b/include/future index 9b768e37..758296a1 100644 --- a/include/future +++ b/include/future @@ -962,12 +962,12 @@ __async_assoc_state::__on_zero_shared() _NOEXCEPT base::__on_zero_shared(); } -template class promise; -template class shared_future; +template class _LIBCPP_VISIBLE promise; +template class _LIBCPP_VISIBLE shared_future; // future -template class future; +template class _LIBCPP_VISIBLE future; template future<_Rp> diff --git a/include/ios b/include/ios index d02651b8..7e489e39 100644 --- a/include/ios +++ b/include/ios @@ -227,7 +227,7 @@ typedef ptrdiff_t streamsize; class _LIBCPP_VISIBLE ios_base { public: - class failure; + class _LIBCPP_VISIBLE failure; typedef unsigned int fmtflags; static const fmtflags boolalpha = 0x0001; @@ -271,7 +271,7 @@ public: typedef _VSTD::streamoff streamoff; typedef _VSTD::streampos streampos; - class Init; + class _LIBCPP_VISIBLE Init; // 27.5.2.2 fmtflags state: _LIBCPP_INLINE_VISIBILITY fmtflags flags() const; diff --git a/include/iosfwd b/include/iosfwd index 7e5ac732..efdff5f3 100644 --- a/include/iosfwd +++ b/include/iosfwd @@ -95,7 +95,7 @@ typedef fpos::state_type> wstreampos; _LIBCPP_BEGIN_NAMESPACE_STD -class ios_base; +class _LIBCPP_VISIBLE ios_base; template struct _LIBCPP_VISIBLE char_traits; template class _LIBCPP_VISIBLE allocator; diff --git a/include/istream b/include/istream index b48f8564..72b2004d 100644 --- a/include/istream +++ b/include/istream @@ -194,7 +194,7 @@ protected: public: // 27.7.1.1.3 Prefix/suffix: - class sentry; + class _LIBCPP_VISIBLE sentry; // 27.7.1.2 Formatted input: basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&)); diff --git a/include/iterator b/include/iterator index 2c9ae12d..167db52c 100644 --- a/include/iterator +++ b/include/iterator @@ -1009,43 +1009,52 @@ make_move_iterator(const _Iter& __i) template class __wrap_iter; template +_LIBCPP_INLINE_VISIBILITY bool operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY bool operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY bool operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY bool operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY bool operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY bool operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY typename __wrap_iter<_Iter1>::difference_type operator-(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT; template +_LIBCPP_INLINE_VISIBILITY __wrap_iter<_Iter> operator+(typename __wrap_iter<_Iter>::difference_type, __wrap_iter<_Iter>) _NOEXCEPT; -template _Op copy(_Ip, _Ip, _Op); -template _B2 copy_backward(_B1, _B1, _B2); -template _Op move(_Ip, _Ip, _Op); -template _B2 move_backward(_B1, _B1, _B2); +template _Op _LIBCPP_INLINE_VISIBILITY copy(_Ip, _Ip, _Op); +template _B2 _LIBCPP_INLINE_VISIBILITY copy_backward(_B1, _B1, _B2); +template _Op _LIBCPP_INLINE_VISIBILITY move(_Ip, _Ip, _Op); +template _B2 _LIBCPP_INLINE_VISIBILITY move_backward(_B1, _B1, _B2); template +_LIBCPP_INLINE_VISIBILITY typename enable_if < is_trivially_copy_assignable<_Tp>::value, @@ -1313,34 +1322,42 @@ operator+(typename __wrap_iter<_Iter>::difference_type __n, template class __debug_iter; template +_LIBCPP_INLINE_VISIBILITY bool operator==(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY bool operator<(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY bool operator!=(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY bool operator>(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY bool operator>=(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY bool operator<=(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY typename __debug_iter<_Container, _Iter1>::difference_type operator-(const __debug_iter<_Container, _Iter1>&, const __debug_iter<_Container, _Iter2>&); template +_LIBCPP_INLINE_VISIBILITY __debug_iter<_Container, _Iter> operator+(typename __debug_iter<_Container, _Iter>::difference_type, const __debug_iter<_Container, _Iter>&); diff --git a/include/list b/include/list index b486e831..81258869 100644 --- a/include/list +++ b/include/list @@ -213,9 +213,9 @@ struct __list_node _Tp __value_; }; -template class list; +template class _LIBCPP_VISIBLE list; template class __list_imp; -template class __list_const_iterator; +template class _LIBCPP_VISIBLE __list_const_iterator; template class _LIBCPP_VISIBLE __list_iterator diff --git a/include/memory b/include/memory index 5559e498..fe5dd0c7 100644 --- a/include/memory +++ b/include/memory @@ -3580,7 +3580,7 @@ public: virtual const char* what() const _NOEXCEPT; }; -template class weak_ptr; +template class _LIBCPP_VISIBLE weak_ptr; class __shared_count { @@ -3746,7 +3746,7 @@ __shared_ptr_emplace<_Tp, _Alloc>::__on_zero_shared_weak() _NOEXCEPT __a.deallocate(this, 1); } -template class enable_shared_from_this; +template class _LIBCPP_VISIBLE enable_shared_from_this; template class _LIBCPP_VISIBLE shared_ptr @@ -5278,10 +5278,10 @@ private: __sp_mut(const __sp_mut&); __sp_mut& operator=(const __sp_mut&); - friend __sp_mut& __get_sp_mut(const void*); + friend _LIBCPP_VISIBLE __sp_mut& __get_sp_mut(const void*); }; -__sp_mut& __get_sp_mut(const void*); +_LIBCPP_VISIBLE __sp_mut& __get_sp_mut(const void*); template inline _LIBCPP_INLINE_VISIBILITY diff --git a/include/mutex b/include/mutex index 61f53e0a..ee20f021 100644 --- a/include/mutex +++ b/include/mutex @@ -425,17 +425,19 @@ lock(_L0& __l0, _L1& __l1, _L2& __l2, _L3& ...__l3) #endif // _LIBCPP_HAS_NO_VARIADICS -struct once_flag; +struct _LIBCPP_VISIBLE once_flag; #ifndef _LIBCPP_HAS_NO_VARIADICS template - void call_once(once_flag&, _Callable&&, _Args&&...); +_LIBCPP_INLINE_VISIBILITY +void call_once(once_flag&, _Callable&&, _Args&&...); #else // _LIBCPP_HAS_NO_VARIADICS template - void call_once(once_flag&, _Callable); +_LIBCPP_INLINE_VISIBILITY +void call_once(once_flag&, _Callable); #endif // _LIBCPP_HAS_NO_VARIADICS diff --git a/include/ostream b/include/ostream index e6dd4b57..b135ddb7 100644 --- a/include/ostream +++ b/include/ostream @@ -169,7 +169,7 @@ protected: public: // 27.7.2.4 Prefix/suffix: - class sentry; + class _LIBCPP_VISIBLE sentry; // 27.7.2.6 Formatted output: basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&)); diff --git a/include/queue b/include/queue index e05ab8f8..4741f003 100644 --- a/include/queue +++ b/include/queue @@ -177,13 +177,15 @@ template _LIBCPP_BEGIN_NAMESPACE_STD -template class queue; +template class _LIBCPP_VISIBLE queue; template +_LIBCPP_INLINE_VISIBILITY bool operator==(const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); template +_LIBCPP_INLINE_VISIBILITY bool operator< (const queue<_Tp, _Container>& __x,const queue<_Tp, _Container>& __y); diff --git a/include/random b/include/random index 305f8866..a1553f13 100644 --- a/include/random +++ b/include/random @@ -1813,10 +1813,11 @@ struct __lce_ta<__a, __c, __m, (unsigned short)(~0), __b> }; template -class linear_congruential_engine; +class _LIBCPP_VISIBLE linear_congruential_engine; template +_LIBCPP_INLINE_VISIBILITY basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __os, const linear_congruential_engine<_Up, _Ap, _Cp, _Np>&); @@ -2021,7 +2022,7 @@ typedef minstd_rand default_random_engine; template -class mersenne_twister_engine; +class _LIBCPP_VISIBLE mersenne_twister_engine; template +_LIBCPP_INLINE_VISIBILITY bool operator!=(const mersenne_twister_engine<_UI, _Wp, _Np, _Mp, _Rp, _Ap, _Up, _Dp, _Sp, _Bp, _Tp, _Cp, _Lp, _Fp>& __x, @@ -2424,7 +2426,7 @@ typedef mersenne_twister_engine -class subtract_with_carry_engine; +class _LIBCPP_VISIBLE subtract_with_carry_engine; template bool @@ -2433,6 +2435,7 @@ operator==( const subtract_with_carry_engine<_UI, _Wp, _Sp, _Rp>& __y); template +_LIBCPP_INLINE_VISIBILITY bool operator!=( const subtract_with_carry_engine<_UI, _Wp, _Sp, _Rp>& __x, diff --git a/include/regex b/include/regex index 16d6102c..3918ee0d 100644 --- a/include/regex +++ b/include/regex @@ -1231,11 +1231,11 @@ regex_traits<_CharT>::__value(wchar_t __ch, int __radix) const template class __node; -template class sub_match; +template class _LIBCPP_VISIBLE sub_match; template > > -class match_results; +class _LIBCPP_VISIBLE match_results; template struct __state diff --git a/include/stack b/include/stack index 59906bd8..12fb35b7 100644 --- a/include/stack +++ b/include/stack @@ -91,13 +91,15 @@ template _LIBCPP_BEGIN_NAMESPACE_STD -template class stack; +template class _LIBCPP_VISIBLE stack; template +_LIBCPP_INLINE_VISIBILITY bool operator==(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y); template +_LIBCPP_INLINE_VISIBILITY bool operator< (const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y); diff --git a/include/system_error b/include/system_error index e9f2b55e..9f7e4e9e 100644 --- a/include/system_error +++ b/include/system_error @@ -354,12 +354,12 @@ struct _LIBCPP_VISIBLE is_error_condition_enum : true_type { }; #endif -class error_condition; -class error_code; +class _LIBCPP_VISIBLE error_condition; +class _LIBCPP_VISIBLE error_code; // class error_category -class __do_message; +class _LIBCPP_HIDDEN __do_message; class _LIBCPP_VISIBLE error_category { @@ -387,7 +387,7 @@ public: _LIBCPP_ALWAYS_INLINE bool operator< (const error_category& __rhs) const _NOEXCEPT {return this < &__rhs;} - friend class __do_message; + friend class _LIBCPP_HIDDEN __do_message; }; class _LIBCPP_HIDDEN __do_message diff --git a/include/thread b/include/thread index 94e7ab6c..60d88859 100644 --- a/include/thread +++ b/include/thread @@ -173,13 +173,13 @@ __thread_specific_ptr<_Tp>::reset(pointer __p) delete __p_old; } -class thread; -class __thread_id; +class _LIBCPP_VISIBLE thread; +class _LIBCPP_VISIBLE __thread_id; namespace this_thread { -__thread_id get_id() _NOEXCEPT; +_LIBCPP_INLINE_VISIBILITY __thread_id get_id() _NOEXCEPT; } // this_thread diff --git a/include/tuple b/include/tuple index d2bc21f8..65af3eb6 100644 --- a/include/tuple +++ b/include/tuple @@ -803,7 +803,7 @@ struct __ignore_t namespace { const __ignore_t ignore = __ignore_t(); } -template class reference_wrapper; +template class _LIBCPP_VISIBLE reference_wrapper; template struct ___make_tuple_return diff --git a/include/type_traits b/include/type_traits index 783ed3f5..f74b7784 100644 --- a/include/type_traits +++ b/include/type_traits @@ -2829,11 +2829,13 @@ __invoke(__any, _Args&& ...__args) // bullets 1 and 2 template +_LIBCPP_INLINE_VISIBILITY auto __invoke(_Fp&& __f, _A0&& __a0, _Args&& ...__args) -> decltype((_VSTD::forward<_A0>(__a0).*__f)(_VSTD::forward<_Args>(__args)...)); template +_LIBCPP_INLINE_VISIBILITY auto __invoke(_Fp&& __f, _A0&& __a0, _Args&& ...__args) -> decltype(((*_VSTD::forward<_A0>(__a0)).*__f)(_VSTD::forward<_Args>(__args)...)); @@ -2841,11 +2843,13 @@ __invoke(_Fp&& __f, _A0&& __a0, _Args&& ...__args) // bullets 3 and 4 template +_LIBCPP_INLINE_VISIBILITY auto __invoke(_Fp&& __f, _A0&& __a0) -> decltype(_VSTD::forward<_A0>(__a0).*__f); template +_LIBCPP_INLINE_VISIBILITY auto __invoke(_Fp&& __f, _A0&& __a0) -> decltype((*_VSTD::forward<_A0>(__a0)).*__f); @@ -2853,6 +2857,7 @@ __invoke(_Fp&& __f, _A0&& __a0) // bullet 5 template +_LIBCPP_INLINE_VISIBILITY auto __invoke(_Fp&& __f, _Args&& ...__args) -> decltype(_VSTD::forward<_Fp>(__f)(_VSTD::forward<_Args>(__args)...)); diff --git a/include/utility b/include/utility index a0e16a7f..df693ec1 100644 --- a/include/utility +++ b/include/utility @@ -419,7 +419,7 @@ swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES -template class reference_wrapper; +template class _LIBCPP_VISIBLE reference_wrapper; template struct ___make_pair_return diff --git a/include/valarray b/include/valarray index 01b071b7..4091d0f7 100644 --- a/include/valarray +++ b/include/valarray @@ -354,7 +354,7 @@ template unspecified2 end(const valarray& v); _LIBCPP_BEGIN_NAMESPACE_STD -template class valarray; +template class _LIBCPP_VISIBLE valarray; class _LIBCPP_VISIBLE slice { @@ -381,25 +381,29 @@ public: _LIBCPP_INLINE_VISIBILITY size_t stride() const {return __stride_;} }; -template class slice_array; -class gslice; -template class gslice_array; -template class mask_array; -template class indirect_array; +template class _LIBCPP_VISIBLE slice_array; +class _LIBCPP_VISIBLE gslice; +template class _LIBCPP_VISIBLE gslice_array; +template class _LIBCPP_VISIBLE mask_array; +template class _LIBCPP_VISIBLE indirect_array; template +_LIBCPP_INLINE_VISIBILITY _Tp* begin(valarray<_Tp>& __v); template +_LIBCPP_INLINE_VISIBILITY const _Tp* begin(const valarray<_Tp>& __v); template +_LIBCPP_INLINE_VISIBILITY _Tp* end(valarray<_Tp>& __v); template +_LIBCPP_INLINE_VISIBILITY const _Tp* end(const valarray<_Tp>& __v);