diff --git a/include/valarray b/include/valarray
index 72e9cae..3c0422a 100644
--- a/include/valarray
+++ b/include/valarray
@@ -794,43 +794,38 @@
 
 public:
     // construct/destroy:
-    _LIBCPP_INLINE_VISIBILITY valarray() : __begin_(0), __end_(0) {}
-    _LIBCPP_INLINE_VISIBILITY explicit valarray(size_t __n);
-    _LIBCPP_INLINE_VISIBILITY valarray(const value_type& __x, size_t __n);
-    _LIBCPP_INLINE_VISIBILITY valarray(const value_type* __p, size_t __n);
-    _LIBCPP_INLINE_VISIBILITY valarray(const valarray& __v);
+    _LIBCPP_INLINE_VISIBILITY
+    valarray() : __begin_(0), __end_(0) {}
+    explicit valarray(size_t __n);
+    valarray(const value_type& __x, size_t __n);
+    valarray(const value_type* __p, size_t __n);
+    valarray(const valarray& __v);
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY valarray(valarray&& __v);
+    valarray(valarray&& __v);
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-    _LIBCPP_INLINE_VISIBILITY valarray(initializer_list<value_type> __il);
+    valarray(initializer_list<value_type> __il);
 #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-    _LIBCPP_INLINE_VISIBILITY valarray(const slice_array<value_type>& __sa);
-    _LIBCPP_INLINE_VISIBILITY valarray(const gslice_array<value_type>& __ga);
-    _LIBCPP_INLINE_VISIBILITY valarray(const mask_array<value_type>& __ma);
-    _LIBCPP_INLINE_VISIBILITY valarray(const indirect_array<value_type>& __ia);
-    _LIBCPP_INLINE_VISIBILITY ~valarray();
+    valarray(const slice_array<value_type>& __sa);
+    valarray(const gslice_array<value_type>& __ga);
+    valarray(const mask_array<value_type>& __ma);
+    valarray(const indirect_array<value_type>& __ia);
+    ~valarray();
 
     // assignment:
-    _LIBCPP_INLINE_VISIBILITY valarray& operator=(const valarray& __v);
+    valarray& operator=(const valarray& __v);
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator=(valarray&& __v);
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-    _LIBCPP_INLINE_VISIBILITY valarray& operator=(initializer_list<value_type>);
+    valarray& operator=(initializer_list<value_type>);
 #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-    _LIBCPP_INLINE_VISIBILITY valarray& operator=(const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
+    valarray& operator=(const value_type& __x);
     valarray& operator=(const slice_array<value_type>& __sa);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator=(const gslice_array<value_type>& __ga);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator=(const mask_array<value_type>& __ma);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator=(const indirect_array<value_type>& __ia);
     template <class _ValExpr>
-        _LIBCPP_INLINE_VISIBILITY
         valarray& operator=(const __val_expr<_ValExpr>& __v);
 
     // element access:
@@ -841,71 +836,46 @@
     value_type&       operator[](size_t __i)       {return __begin_[__i];}
 
     // subset operations:
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__slice_expr<const valarray&> >    operator[](slice __s) const;
-    _LIBCPP_INLINE_VISIBILITY
     slice_array<value_type>                       operator[](slice __s);
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__indirect_expr<const valarray&> > operator[](const gslice& __gs) const;
-    _LIBCPP_INLINE_VISIBILITY
     gslice_array<value_type>   operator[](const gslice& __gs);
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__indirect_expr<const valarray&> > operator[](gslice&& __gs) const;
-    _LIBCPP_INLINE_VISIBILITY
     gslice_array<value_type>                      operator[](gslice&& __gs);
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__mask_expr<const valarray&> >     operator[](const valarray<bool>& __vb) const;
-    _LIBCPP_INLINE_VISIBILITY
     mask_array<value_type>                        operator[](const valarray<bool>& __vb);
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__mask_expr<const valarray&> >     operator[](valarray<bool>&& __vb) const;
-    _LIBCPP_INLINE_VISIBILITY
     mask_array<value_type>                        operator[](valarray<bool>&& __vb);
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__indirect_expr<const valarray&> > operator[](const valarray<size_t>& __vs) const;
-    _LIBCPP_INLINE_VISIBILITY
     indirect_array<value_type>                    operator[](const valarray<size_t>& __vs);
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-    _LIBCPP_INLINE_VISIBILITY
     __val_expr<__indirect_expr<const valarray&> > operator[](valarray<size_t>&& __vs) const;
-    _LIBCPP_INLINE_VISIBILITY
     indirect_array<value_type>                    operator[](valarray<size_t>&& __vs);
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
     // unary operators:
-    _LIBCPP_INLINE_VISIBILITY valarray       operator+() const;
-    _LIBCPP_INLINE_VISIBILITY valarray       operator-() const;
-    _LIBCPP_INLINE_VISIBILITY valarray       operator~() const;
-    _LIBCPP_INLINE_VISIBILITY valarray<bool> operator!() const;
+    valarray       operator+() const;
+    valarray       operator-() const;
+    valarray       operator~() const;
+    valarray<bool> operator!() const;
 
     // computed assignment:
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator*= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator/= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator%= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator+= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator-= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator^= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator&= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator|= (const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator<<=(const value_type& __x);
-    _LIBCPP_INLINE_VISIBILITY
     valarray& operator>>=(const value_type& __x);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -914,7 +884,6 @@
     operator*= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -923,7 +892,6 @@
     operator/= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -932,7 +900,6 @@
     operator%= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -941,7 +908,6 @@
     operator+= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -950,7 +916,6 @@
     operator-= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -959,7 +924,6 @@
     operator^= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -968,7 +932,6 @@
     operator|= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -977,7 +940,6 @@
     operator&= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -986,7 +948,6 @@
     operator<<= (const _Expr& __v);
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -995,20 +956,18 @@
     operator>>= (const _Expr& __v);
 
     // member functions:
-    _LIBCPP_INLINE_VISIBILITY void swap(valarray& __v);
+    void swap(valarray& __v);
 
     _LIBCPP_INLINE_VISIBILITY
     size_t size() const {return static_cast<size_t>(__end_ - __begin_);}
 
-    _LIBCPP_INLINE_VISIBILITY value_type sum() const;
-    _LIBCPP_INLINE_VISIBILITY value_type min() const;
-    _LIBCPP_INLINE_VISIBILITY value_type max() const;
+    value_type sum() const;
+    value_type min() const;
+    value_type max() const;
 
-    _LIBCPP_INLINE_VISIBILITY valarray shift (int __i) const;
-    _LIBCPP_INLINE_VISIBILITY valarray cshift(int __i) const;
-    _LIBCPP_INLINE_VISIBILITY
+    valarray shift (int __i) const;
+    valarray cshift(int __i) const;
     valarray apply(value_type __f(value_type)) const;
-    _LIBCPP_INLINE_VISIBILITY
     valarray apply(value_type __f(const value_type&)) const;
     void     resize(size_t __n, value_type __x = value_type());
 
@@ -1140,7 +1099,6 @@
 
 public:
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1149,7 +1107,6 @@
     operator=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1158,7 +1115,6 @@
     operator*=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1167,7 +1123,6 @@
     operator/=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1176,7 +1131,6 @@
     operator%=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1185,7 +1139,6 @@
     operator+=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1194,7 +1147,6 @@
     operator-=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1203,7 +1155,6 @@
     operator^=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1212,7 +1163,6 @@
     operator&=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1221,7 +1171,6 @@
     operator|=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1230,7 +1179,6 @@
     operator<<=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1238,10 +1186,8 @@
     >::type
     operator>>=(const _Expr& __v) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     const slice_array& operator=(const slice_array& __sa) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
 private:
@@ -1257,7 +1203,7 @@
 };
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 const slice_array<_Tp>&
 slice_array<_Tp>::operator=(const slice_array& __sa) const
 {
@@ -1269,7 +1215,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1284,7 +1230,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1299,7 +1245,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1314,7 +1260,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1329,7 +1275,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1344,7 +1290,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1359,7 +1305,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1374,7 +1320,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1389,7 +1335,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1404,7 +1350,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1419,7 +1365,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1433,7 +1379,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 void
 slice_array<_Tp>::operator=(const value_type& __x) const
 {
@@ -1453,7 +1399,7 @@
 public:
     _LIBCPP_INLINE_VISIBILITY
     gslice() {}
-    
+
     _LIBCPP_INLINE_VISIBILITY
     gslice(size_t __start, const valarray<size_t>& __size,
                            const valarray<size_t>& __stride)
@@ -1522,7 +1468,6 @@
 
 public:
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1531,7 +1476,6 @@
     operator=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1540,7 +1484,6 @@
     operator*=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1549,7 +1492,6 @@
     operator/=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1558,7 +1500,6 @@
     operator%=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1567,7 +1508,6 @@
     operator+=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1576,7 +1516,6 @@
     operator-=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1585,7 +1524,6 @@
     operator^=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1594,7 +1532,6 @@
     operator&=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1603,7 +1540,6 @@
     operator|=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1612,7 +1548,6 @@
     operator<<=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1620,10 +1555,8 @@
     >::type
     operator>>=(const _Expr& __v) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     const gslice_array& operator=(const gslice_array& __ga) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
 //  gslice_array(const gslice_array&)            = default;
@@ -1653,7 +1586,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1669,7 +1602,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1685,7 +1618,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1701,7 +1634,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1717,7 +1650,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1733,7 +1666,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1749,7 +1682,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1765,7 +1698,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1781,7 +1714,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1797,7 +1730,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1813,7 +1746,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -1828,7 +1761,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 const gslice_array<_Tp>&
 gslice_array<_Tp>::operator=(const gslice_array& __ga) const
 {
@@ -1841,7 +1774,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 void
 gslice_array<_Tp>::operator=(const value_type& __x) const
 {
@@ -1864,7 +1797,6 @@
 
 public:
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1873,7 +1805,6 @@
     operator=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1882,7 +1813,6 @@
     operator*=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1891,7 +1821,6 @@
     operator/=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1900,7 +1829,6 @@
     operator%=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1909,7 +1837,6 @@
     operator+=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1918,7 +1845,6 @@
     operator-=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1927,7 +1853,6 @@
     operator^=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1936,7 +1861,6 @@
     operator&=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1945,7 +1869,6 @@
     operator|=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1954,7 +1877,6 @@
     operator<<=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -1962,10 +1884,8 @@
     >::type
     operator>>=(const _Expr& __v) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     const mask_array& operator=(const mask_array& __ma) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
 //  mask_array(const mask_array&)            = default;
@@ -1990,7 +1910,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2005,7 +1925,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2020,7 +1940,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2035,7 +1955,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2050,7 +1970,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2065,7 +1985,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2080,7 +2000,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2095,7 +2015,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2110,7 +2030,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2125,7 +2045,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2140,7 +2060,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2154,7 +2074,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 const mask_array<_Tp>&
 mask_array<_Tp>::operator=(const mask_array& __ma) const
 {
@@ -2164,7 +2084,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 void
 mask_array<_Tp>::operator=(const value_type& __x) const
 {
@@ -2221,7 +2141,6 @@
 
 public:
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2230,7 +2149,6 @@
     operator=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2239,7 +2157,6 @@
     operator*=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2248,7 +2165,6 @@
     operator/=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2257,7 +2173,6 @@
     operator%=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2266,7 +2181,6 @@
     operator+=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2275,7 +2189,6 @@
     operator-=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2284,7 +2197,6 @@
     operator^=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2293,7 +2205,6 @@
     operator&=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2302,7 +2213,6 @@
     operator|=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2311,7 +2221,6 @@
     operator<<=(const _Expr& __v) const;
 
     template <class _Expr>
-    _LIBCPP_INLINE_VISIBILITY
     typename enable_if
     <
         __is_val_expr<_Expr>::value,
@@ -2319,10 +2228,8 @@
     >::type
     operator>>=(const _Expr& __v) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     const indirect_array& operator=(const indirect_array& __ia) const;
 
-    _LIBCPP_INLINE_VISIBILITY
     void operator=(const value_type& __x) const;
 
 //  indirect_array(const indirect_array&)            = default;
@@ -2352,7 +2259,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2367,7 +2274,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2382,7 +2289,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2397,7 +2304,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2412,7 +2319,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2427,7 +2334,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2442,7 +2349,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2457,7 +2364,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2472,7 +2379,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2487,7 +2394,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2502,7 +2409,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -2516,7 +2423,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 const indirect_array<_Tp>&
 indirect_array<_Tp>::operator=(const indirect_array& __ia) const
 {
@@ -2529,7 +2436,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 void
 indirect_array<_Tp>::operator=(const value_type& __x) const
 {
@@ -2731,7 +2638,7 @@
 // valarray
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>::valarray(size_t __n)
     : __begin_(0),
       __end_(0)
@@ -2740,7 +2647,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>::valarray(const value_type& __x, size_t __n)
     : __begin_(0),
       __end_(0)
@@ -2801,7 +2708,7 @@
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>::valarray(valarray&& __v)
     : __begin_(__v.__begin_),
       __end_(__v.__end_)
@@ -2955,7 +2862,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>::~valarray()
 {
     resize(0);
@@ -2977,7 +2884,7 @@
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(valarray&& __v)
 {
@@ -2994,7 +2901,7 @@
 #ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(initializer_list<value_type> __il)
 {
@@ -3007,7 +2914,7 @@
 #endif  // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(const value_type& __x)
 {
@@ -3016,7 +2923,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(const slice_array<value_type>& __sa)
 {
@@ -3028,7 +2935,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(const gslice_array<value_type>& __ga)
 {
@@ -3042,7 +2949,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(const mask_array<value_type>& __ma)
 {
@@ -3056,7 +2963,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(const indirect_array<value_type>& __ia)
 {
@@ -3071,7 +2978,7 @@
 
 template <class _Tp>
 template <class _ValExpr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator=(const __val_expr<_ValExpr>& __v)
 {
@@ -3085,7 +2992,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__slice_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](slice __s) const
 {
@@ -3093,7 +3000,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 slice_array<_Tp>
 valarray<_Tp>::operator[](slice __s)
 {
@@ -3101,7 +3008,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__indirect_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](const gslice& __gs) const
 {
@@ -3109,7 +3016,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 gslice_array<_Tp>
 valarray<_Tp>::operator[](const gslice& __gs)
 {
@@ -3119,7 +3026,7 @@
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__indirect_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](gslice&& __gs) const
 {
@@ -3127,7 +3034,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 gslice_array<_Tp>
 valarray<_Tp>::operator[](gslice&& __gs)
 {
@@ -3137,7 +3044,7 @@
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__mask_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](const valarray<bool>& __vb) const
 {
@@ -3145,7 +3052,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 mask_array<_Tp>
 valarray<_Tp>::operator[](const valarray<bool>& __vb)
 {
@@ -3155,7 +3062,7 @@
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__mask_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](valarray<bool>&& __vb) const
 {
@@ -3163,7 +3070,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 mask_array<_Tp>
 valarray<_Tp>::operator[](valarray<bool>&& __vb)
 {
@@ -3173,7 +3080,7 @@
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__indirect_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](const valarray<size_t>& __vs) const
 {
@@ -3181,7 +3088,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 indirect_array<_Tp>
 valarray<_Tp>::operator[](const valarray<size_t>& __vs)
 {
@@ -3191,7 +3098,7 @@
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 __val_expr<__indirect_expr<const valarray<_Tp>&> >
 valarray<_Tp>::operator[](valarray<size_t>&& __vs) const
 {
@@ -3199,7 +3106,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 indirect_array<_Tp>
 valarray<_Tp>::operator[](valarray<size_t>&& __vs)
 {
@@ -3277,7 +3184,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator*=(const value_type& __x)
 {
@@ -3287,7 +3194,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator/=(const value_type& __x)
 {
@@ -3297,7 +3204,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator%=(const value_type& __x)
 {
@@ -3307,7 +3214,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator+=(const value_type& __x)
 {
@@ -3317,7 +3224,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator-=(const value_type& __x)
 {
@@ -3327,7 +3234,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator^=(const value_type& __x)
 {
@@ -3337,7 +3244,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator&=(const value_type& __x)
 {
@@ -3347,7 +3254,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator|=(const value_type& __x)
 {
@@ -3357,7 +3264,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator<<=(const value_type& __x)
 {
@@ -3367,7 +3274,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 valarray<_Tp>&
 valarray<_Tp>::operator>>=(const value_type& __x)
 {
@@ -3378,7 +3285,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3394,7 +3301,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3410,7 +3317,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3426,7 +3333,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3442,7 +3349,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3458,7 +3365,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3474,7 +3381,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3490,7 +3397,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3506,7 +3413,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3522,7 +3429,7 @@
 
 template <class _Tp>
 template <class _Expr>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 typename enable_if
 <
     __is_val_expr<_Expr>::value,
@@ -3537,7 +3444,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 void
 valarray<_Tp>::swap(valarray& __v)
 {
@@ -3546,7 +3453,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 _Tp
 valarray<_Tp>::sum() const
 {
@@ -3560,7 +3467,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 _Tp
 valarray<_Tp>::min() const
 {
@@ -3570,7 +3477,7 @@
 }
 
 template <class _Tp>
-inline
+inline _LIBCPP_INLINE_VISIBILITY
 _Tp
 valarray<_Tp>::max() const
 {
