std :: unique_ptr, deleters y la API de Win32

En VC2012, quiero crear una exclusión mutua en un constructor utilizando un puntero único y un eliminador, de modo que no necesito crear un destructor solo para llamar a CloseHandle.

Habría pensado que esto funcionaría:

struct foo
{
    std::unique_ptr<HANDLE, BOOL(*)(HANDLE)> m_mutex;
    foo() : m_mutex(CreateMutex(NULL, FALSE, NULL), CloseHandle) {}
}

Pero al compilar me sale un error:

error C2664: 'std::unique_ptr<_Ty,_Dx>::unique_ptr(void *,int 
(__cdecl *const &)(HANDLE)) throw()' : cannot convert parameter 1 from 
'HANDLE' to 'void *'

Cuando modifico el constructor así:

foo() : m_mutex((void*)CreateMutex(NULL, FALSE, 
    (name + " buffer mutex").c_str()), CloseHandle) {}

Me sale aún más inusual:

error C2664: 'std::unique_ptr<_Ty,_Dx>::unique_ptr(void *,
int (__cdecl *const &)(HANDLE)) throw()' : cannot convert 
parameter 1 from 'void *' to 'void *'

Estoy en una pérdida ahora. HANDLE es un typedef para void *: ¿hay alguna magia de conversión que deba conocer?

Respuestas a la pregunta(3)

Su respuesta a la pregunta