Ticket #9169: boost_ref_forceinline.diff

File boost_ref_forceinline.diff, 2.3 KB (added by Mathias Gaunard, 9 years ago)

patch to add BOOST_FORCEINLINE to critical boost::ref functions

  • boost/ref.hpp

     
    3030{
    3131
    3232template<class T> class reference_wrapper
    33 { 
     33{
    3434public:
    3535    typedef T type;
    3636
    3737#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )
    3838
    39     explicit reference_wrapper(T& t): t_(&t) {}
     39    BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(&t) {}
    4040
    4141#else
    4242
    43     explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}
     43    BOOST_FORCEINLINE explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}
    4444
    4545#endif
    4646
    47     operator T& () const { return *t_; }
     47    BOOST_FORCEINLINE operator T& () const { return *t_; }
    4848
    49     T& get() const { return *t_; }
     49    BOOST_FORCEINLINE T& get() const { return *t_; }
    5050
    51     T* get_pointer() const { return t_; }
     51    BOOST_FORCEINLINE T* get_pointer() const { return t_; }
    5252
    5353private:
    5454
     
    6161#  define BOOST_REF_CONST const
    6262# endif
    6363
    64 template<class T> inline reference_wrapper<T> BOOST_REF_CONST ref(T & t)
    65 { 
     64template<class T> BOOST_FORCEINLINE reference_wrapper<T> BOOST_REF_CONST ref(T & t)
     65{
    6666    return reference_wrapper<T>(t);
    6767}
    6868
    69 template<class T> inline reference_wrapper<T const> BOOST_REF_CONST cref(T const & t)
     69template<class T> BOOST_FORCEINLINE reference_wrapper<T const> BOOST_REF_CONST cref(T const & t)
    7070{
    7171    return reference_wrapper<T const>(t);
    7272}
     
    125125{
    126126  typedef char (&yes_reference_wrapper_t)[1];
    127127  typedef char (&no_reference_wrapper_t)[2];
    128      
     128
    129129  no_reference_wrapper_t is_reference_wrapper_test(...);
    130130
    131131  template<typename T>
     
    160160        bool, value = (
    161161             sizeof(detail::is_reference_wrapper_test(type<T>()))
    162162            == sizeof(detail::yes_reference_wrapper_t)));
    163    
     163
    164164    typedef ::boost::mpl::bool_<value> type;
    165165};
    166166
     
    173173
    174174# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
    175175
    176 template <class T> inline typename unwrap_reference<T>::type&
     176template <class T> BOOST_FORCEINLINE typename unwrap_reference<T>::type&
    177177unwrap_ref(T& t)
    178178{
    179179    return t;
    180180}
    181181
    182 template<class T> inline T* get_pointer( reference_wrapper<T> const & r )
     182template<class T> BOOST_FORCEINLINE T* get_pointer( reference_wrapper<T> const & r )
    183183{
    184184    return r.get_pointer();
    185185}