1099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//===----------------------------------------------------------------------===//
2099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//
3099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//                     The LLVM Compiler Infrastructure
4099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//
5099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
7099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//
8099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//===----------------------------------------------------------------------===//
9099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant
10099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant// <functional>
11099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant
12099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant// template<CopyConstructible Fn, CopyConstructible... Types>
13099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//   unspecified bind(Fn, Types...);
14099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant// template<Returnable R, CopyConstructible Fn, CopyConstructible... Types>
15099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant//   unspecified bind(Fn, Types...);
16099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant
17099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant// http://llvm.org/bugs/show_bug.cgi?id=16385
18099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant
19099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant#include <functional>
20099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant#include <cmath>
21099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant#include <cassert>
22099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant
23099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnantfloat _pow(float a, float b)
24099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant{
25099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant    return std::pow(a, b);
26099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant}
27099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant
28099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnantint main()
29099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant{
30099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant    std::function<float(float, float)> fnc = _pow;
31099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant    auto task = std::bind(fnc, 2.f, 4.f);
32099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant    auto task2(task);
33099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant    assert(task() == 16);
34099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant    assert(task2() == 16);
35099dec1ba0a48c1b033565be651ca37b24c3ebcaHoward Hinnant}
36