¿Cómo usar sfinae para seleccionar constructores?

En la meta programación de plantillas, se puede usar SFINAE en eltipo de retorno para elegir una determinada función miembro de plantilla, es decir,

template<int N> struct A {
  int sum() const noexcept
  { return _sum<N-1>(); }
private:
  int _data[N];
  template<int I> typename std::enable_if< I,int>::type _sum() const noexcept
  { return _sum<I-1>() + _data[I]; }
  template<int I> typename std::enable_if<!I,int>::type _sum() const noexcept
  { return _data[I]; }
};

Sin embargo, esto no funciona en los constructores. Supongamos, quiero declarar al constructor.

template<int N> struct A {
   /* ... */
   template<int otherN>
   explicit(A<otherN> const&); // only sensible if otherN >= N
};

pero no lo permitasotherN < N.

Asi que,¿Se puede usar SFINAE aquí? Solo me interesan las soluciones que permiten la deducción automática de parámetros de plantilla, de modo que

A<4> a4{};
A<5> a5{};
A<6> a6{a4};  // doesn't compile
A<3> a3{a5};  // compiles and automatically finds the correct constructor

Nota: este es un ejemplo muy simplificado donde SFINAE puede ser una exageración ystatic_assert puede ser suficiente Sin embargo, quiero saber sipuede use SFINAE en su lugar.

Respuestas a la pregunta(3)

Su respuesta a la pregunta