copy_assign.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <functional>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reference_wrapper
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// reference_wrapper& operator=(const reference_wrapper<T>& x);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <functional>
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class functor1
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::unary_function<int, char>
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test(T& t)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::reference_wrapper<T> r(t);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    T t2 = t;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::reference_wrapper<T> r2(t2);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    r2 = r;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert(&r2.get() == &t);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void f() {}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void g() {}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)test_function()
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::reference_wrapper<void ()> r(f);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::reference_wrapper<void ()> r2(g);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    r2 = r;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert(&r2.get() == &f);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    void (*fp)() = f;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test(fp);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_function();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    functor1 f1;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test(f1);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int i = 0;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test(i);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const int j = 0;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test(j);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)