conversion.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
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
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// operator T& () const;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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>
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtemplate <class T>
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochtest(T& t)
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    std::reference_wrapper<T> r(t);
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    T& r2 = r;
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    assert(&r2 == &t);
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid f() {}
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochint main()
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch{
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    void (*fp)() = f;
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    test(fp);
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    test(f);
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    functor1 f1;
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    test(f1);
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    int i = 0;
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    test(i);
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const int j = 0;
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    test(j);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)