Problema de puntero de función miembro con métodos de biblioteca estándar

Esta pregunta se genera de
Pasar un puntero de función miembro a un método de clase sobrecargado en una función de plantilla.
No necesita leer eso para entender esta pregunta. Probablemente ambas preguntas tendrán la misma respuesta.

estoy obteniendoerror del compilador para el siguiente código simple.

#include<set>
template<typename Return, typename T>
T ReceiveFuncPtr (Return (T::*Method)(const int&))
{
  T obj;  // Found and declared an object of actual container class
  (obj.*Method)(1);  // Some processing
  return obj;  // Returned that container class object with RVO
} 
int main ()
{
  ReceiveFuncPtr(&std::set<int>::insert); // ERROR
}

El error es interesante:

 In function 'int main()':
error: no matching function for call to 'ReceiveFuncPtr(<unresolved overloaded function type>)'
   ReceiveFuncPtr(&std::set<int>::insert); // ERROR
                                        ^   
note: candidate is: 
note: template<class Return, class T> T ReceiveFuncPtr(Return (T::*)(const int&))
 T ReceiveFuncPtr (Return (T::*Method)(const int&))
   ^   
note:   template argument deduction/substitution failed:
note:   mismatched types 'const int&' and 'std::initializer_list<int>'
   ReceiveFuncPtr(&std::set<int>::insert); // ERROR
                                        ^   
note:   mismatched types 'const int&' and 'std::set<int>::const_iterator {aka std::_Rb_tree_const_iterator<int>}'
note:   mismatched types 'const int&' and 'std::set<int>::const_iterator {aka std::_Rb_tree_const_iterator<int>}'
note:   mismatched types 'const int&' and 'std::set<int>::value_type&& {aka int&&}'
note:   couldn't deduce template parameter 'Return'

Si miras elNotas de cerca, entonces parece que el compilador coincide con todos los otros métodos, excepto el correcto. En este caso, el compilador debería haber coincididoinsert(const std::set<int>::value_type&) tambien conocido comoconst int&. Si cambio elReceiveFuncPtr() para que coincida con alguna otra sobrecarga, fallará nuevamente omitiendo esa sobrecarga.

Para depurar esta situación, creé una versión artesanal destd::set. Pero esocompila bien:

template<typename T, typename T2 = void>
struct MySet
{
  std::pair<T,bool> insert (const T& i) { return std::pair<T,bool>(T(),true); }
  std::pair<T,bool> insert (T&& i) { return std::pair<T,bool>(T(),true); }
  void insert (std::initializer_list<T> i) { return false; }
}
int main ()
{
  ReceiveFuncPtr(&MySet<int>::insert);  // OK
}

Después de surfear, me encontré con esta publicación:
¿Cuáles son las reglas para punteros de función y punteros de función miembro para funciones estándar?

Aunque está relacionado, no resuelve el problema.

Pregunta: ¿Por qué falla la sustitución de la función miembro en el caso del método de biblioteca estándar cuando lo mismo pasa para el método de clase manuscrita?

Actualizar:

Después de mirar la respuesta correcta, estoy seguro de queinsert No puede ser usado. La única forma sería un tipo de letra feo, lo cual es una exageración para este problema.
Uno elegantesolución es usarstd::set<int>::emplace<const int&> que solo tienetemplateversión d a diferencia del inserto que tiene una mezcla detemplate y notemplate versiones.
Llame a la función de la siguiente manera:

ReceiveFuncPtr(&std::set<int>::emplace<const int&>);

Encimacompila bien.

Respuestas a la pregunta(1)

Su respuesta a la pregunta