1 // PR c++/65051 2 3 template<typename T> struct wrap { typedef T type; }; 4 template <class T> class rv: public wrap <T>::type {}; 5 6 template <class value_type> 7 struct circular_buffer 8 { 9 typedef const value_type& param_value_type; 10 typedef rv< value_type >& rvalue_type; 11 push_backcircular_buffer12 void push_back(param_value_type item) {} push_backcircular_buffer13 void push_back(rvalue_type item) {} 14 }; 15 16 union U { int i; char c; }; 17 f(circular_buffer<U> b,const U & u)18void f(circular_buffer<U> b, const U& u) { b.push_back(u); } 19