SFINAE verifica operador + =

Estoy tratando de eliminar una sobrecarga de un conjunto de sobrecarga sioperator+= Está perdido.

Se como comprobar siT+T es legal :

template<typename T,
         typename CheckTplusT = decltype(std::declval<T>() + std::declval<T>())>
void foo(T a, T b, ...)
{
  a = a + b;
}

pero esto no funciona para+=

template<typename T,
         typename CheckTplusT = decltype(std::declval<T>() += std::declval<T>())>
void foo(T a, T b, ...)
{
  a += b;
}

¿Es esto reparable mediante el uso de otra expresión dentrodecltype o necesito otra construcción SFINAE?

La razón por la que necesito que esto se elimine del conjunto de sobrecarga es que choca con otra sobrecarga que acepta un functor como alternativa a+=. Los compiladores son VS2013, gcc4.8

Respuestas a la pregunta(4)

Su respuesta a la pregunta