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