¿Cómo se usa enable_if para plantillas de funciones no miembros mutuamente excluyentes?

Estoy tratando de escribir plantillas de funciones de operadores no miembros como:

#include <utility>

template < typename T, unsigned L >
class MyType;

template < typename T, typename U, unsigned L >
auto  operator ==( MyType<T,L> const &l, MyType<U,L> const &r )
 -> decltype( std::declval<T>() == std::declval<U>() )
{ /*...*/ }

Pero cuando trato de manejar cuandol yr tienen diferentes longitudes:

template < typename T, unsigned Lt, typename U, unsigned Lu, class Enable = typename std::enable_if<(Lt < Lu)>::type >
auto  operator ==( MyType<T,Lt> const &l, MyType<U,Lu> const &r )
 -> decltype( std::declval<T>() == std::declval<U>() )
{ /*...*/ }

template < typename T, unsigned Lt, typename U, unsigned Lu, class Enable = typename std::enable_if<(Lt > Lu)>::type >
auto  operator ==( MyType<T,Lt> const &l, MyType<U,Lu> const &r )
 -> decltype( std::declval<T>() == std::declval<U>() )
{ /*...*/ }

Recibo errores de ambigüedad. Probé algo como:

template < typename T, unsigned Lt, typename U, unsigned Lu, bool B = (Lt < Lu), class Enable = typename std::enable_if<B>::type >
auto  operator ==( MyType<T,Lt> const &l, MyType<U,Lu> const &r )
 -> decltype( std::declval<T>() == std::declval<U>() )
{ /*...*/ }

template < typename T, unsigned Lt, typename U, unsigned Lu, bool B = (Lt > Lu), class Enable = typename std::enable_if<B>::type >
auto  operator ==( MyType<T,Lt> const &l, MyType<U,Lu> const &r )
 -> decltype( std::declval<T>() == std::declval<U>() )
{ /*...*/ }

que he leído (aquí en S.O.) para resolver problemas como este para las plantillas de función miembro. (A veces, los encuestados cambiaron una función miembro a una plantilla de función miembro para habilitar esto). Pero los errores no cambian para mí. ¿Tengo que cambiar a ponerenable_if en el tipo de retorno?

Oh, se supone que la expresión de tipo de retorno excluye este operador cuando los dos tipos de elementos no pueden compararse. ¿Funcionará realmente? ¿Es compatible con poner elenable_if por ahí también?

Respuestas a la pregunta(1)

Su respuesta a la pregunta