Detectar suporte ao operador com decltype / SFINAE

A (um pouco) desatualizadoartig explora maneiras de usardecltype junto com SFINAE para detectar se um tipo suporta certos operadores, como== ou<.

Aqui está um código de exemplo para detectar se uma classe suporta o< operador:

template <class T>
struct supports_less_than
{
    static auto less_than_test(const T* t) -> decltype(*t < *t, char(0))
    { }

    static std::array<char, 2> less_than_test(...) { }

    static const bool value = (sizeof(less_than_test((T*)0)) == 1);
};

int main()
{
    std::cout << std::boolalpha << supports_less_than<std::string>::value << endl;
}

Essa saídatrue, já que é clarostd::string suporta o< operador. No entanto, se eu tentar usá-lo com uma classe que não apoiar o< operador, recebo um erro do compilador:

error: no match for ‘operator<’ in ‘* t < * t’

Sina SFINAE não está funcionando aqui. Eu tentei isso no GCC 4.4 e 4.6 e ambos exibiram o mesmo comportamento. Portanto, é possível usar o SFINAE dessa maneira para detectar se um tipo suporta determinadas expressões?

questionAnswers(5)

yourAnswerToTheQuestion