Ticket #9169: boost_ref_forceinline.diff
File boost_ref_forceinline.diff, 2.3 KB (added by , 9 years ago) |
---|
-
boost/ref.hpp
30 30 { 31 31 32 32 template<class T> class reference_wrapper 33 { 33 { 34 34 public: 35 35 typedef T type; 36 36 37 37 #if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) 38 38 39 explicit reference_wrapper(T& t): t_(&t) {}39 BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(&t) {} 40 40 41 41 #else 42 42 43 explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}43 BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(boost::addressof(t)) {} 44 44 45 45 #endif 46 46 47 operator T& () const { return *t_; }47 BOOST_FORCEINLINE operator T& () const { return *t_; } 48 48 49 T& get() const { return *t_; }49 BOOST_FORCEINLINE T& get() const { return *t_; } 50 50 51 T* get_pointer() const { return t_; }51 BOOST_FORCEINLINE T* get_pointer() const { return t_; } 52 52 53 53 private: 54 54 … … 61 61 # define BOOST_REF_CONST const 62 62 # endif 63 63 64 template<class T> inlinereference_wrapper<T> BOOST_REF_CONST ref(T & t)65 { 64 template<class T> BOOST_FORCEINLINE reference_wrapper<T> BOOST_REF_CONST ref(T & t) 65 { 66 66 return reference_wrapper<T>(t); 67 67 } 68 68 69 template<class T> inlinereference_wrapper<T const> BOOST_REF_CONST cref(T const & t)69 template<class T> BOOST_FORCEINLINE reference_wrapper<T const> BOOST_REF_CONST cref(T const & t) 70 70 { 71 71 return reference_wrapper<T const>(t); 72 72 } … … 125 125 { 126 126 typedef char (&yes_reference_wrapper_t)[1]; 127 127 typedef char (&no_reference_wrapper_t)[2]; 128 128 129 129 no_reference_wrapper_t is_reference_wrapper_test(...); 130 130 131 131 template<typename T> … … 160 160 bool, value = ( 161 161 sizeof(detail::is_reference_wrapper_test(type<T>())) 162 162 == sizeof(detail::yes_reference_wrapper_t))); 163 163 164 164 typedef ::boost::mpl::bool_<value> type; 165 165 }; 166 166 … … 173 173 174 174 # endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION 175 175 176 template <class T> inlinetypename unwrap_reference<T>::type&176 template <class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type& 177 177 unwrap_ref(T& t) 178 178 { 179 179 return t; 180 180 } 181 181 182 template<class T> inlineT* get_pointer( reference_wrapper<T> const & r )182 template<class T> BOOST_FORCEINLINE T* get_pointer( reference_wrapper<T> const & r ) 183 183 { 184 184 return r.get_pointer(); 185 185 }