#include <functional>
template <typename T>
struct function_remove_const;
template <typename R, typename... Args>
struct function_remove_const<R(Args...)>
{
using type = R(Args...);
};
template <typename R, typename... Args>
struct function_remove_const<R(Args...)const>
{
using type = R(Args...);
};
int main()
{
std::function<function_remove_const<double(float)const>::type> f;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGZ1bmN0aW9uX3JlbW92ZV9jb25zdDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBSLCB0eXBlbmFtZS4uLiBBcmdzPgpzdHJ1Y3QgZnVuY3Rpb25fcmVtb3ZlX2NvbnN0PFIoQXJncy4uLik+CnsKICAgIHVzaW5nIHR5cGUgPSBSKEFyZ3MuLi4pOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lLi4uIEFyZ3M+CnN0cnVjdCBmdW5jdGlvbl9yZW1vdmVfY29uc3Q8UihBcmdzLi4uKWNvbnN0Pgp7CiAgICB1c2luZyB0eXBlID0gUihBcmdzLi4uKTsKfTsKICAgCmludCBtYWluKCkKewogICAgc3RkOjpmdW5jdGlvbjxmdW5jdGlvbl9yZW1vdmVfY29uc3Q8ZG91YmxlKGZsb2F0KWNvbnN0Pjo6dHlwZT4gZjsKfQo=