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