Given a std::function it has a member function called target_type which returns the typeid of the stored function object.  That means you can do 
void printName(std::function<void()> func){
    //Need a function name()
    std::cout << func.target_type().name();
}
This returns an implementation-defined string that is unique for each type.  With Visual Studio, this string is human-readable already.  With gcc (or maybe it's glibc?  I don't know who takes care of what in detail) you need to use abi::__cxa_demangle after including <cxxabi.h> to get a human-readable version of the type name.
EDIT
As Matthieu M. pointed out, given a function pointer, the type returned by this will just be the function's signature.  For example:  
int function(){return 0;}
printName(function);
This will output (assuming you demangled if necessary) int (*)() which is not the function's name.  
This method will work with classes though:
struct Function
{
    int operator()(){return 0;}
};
printName(Function{});
This will print Function as desired, but then doesn't work for function pointers.