http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59182
Bug ID: 59182 Summary: can't convert from void (T::*)() to std::function<void()> Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: sequoiahead at gmail dot com Created attachment 31242 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31242&action=edit gcc -v output I'm trying to compile following piece of code: #include <functional> struct Func { void func() {} void pfunc(int p) {} }; int main(int argc, char** argv) { Func fInstance; std::function<void(int)> voidMemberParamFunc = std::bind(&Func::pfunc, fInstance, std::placeholders::_1); std::function<void()> voidMemberFunc = std::bind(&Func::func, fInstance, std::placeholders::_1); //compilation fails here } via "g++ -MMD -MP -D_DEBUG -Werror -Wall -g -std=c++11 -fno-rtti -o "main.o" -c "main.cpp" and receive following error: main.cpp:24:96: error: conversion from 'std::_Bind_helper<false, void (Func::*)(), Func&, const std::_Placeholder<1>&>::type {aka std::_Bind<std::_Mem_fn<void (Func::*)()>(Func, std::_Placeholder<1>)>}' to non-scalar type 'std::function<void()>' requested std::function<void()> voidMemberFunc = std::bind(&Func::func, fInstance, std::placeholders::_1); //compilation fails here The problem is that the compiler is able to convert void Func::pfunc(int) to std::function<void(int)>, but can't convert void Func::func() to std::function<void()>