Следуя этому ответу, кажется, что эти конструкторы:
template<class U, class V> pair(pair<U, V>&& p);
template<class U, class V> pair(const pair<U, V>& p);
запрещается участвовать в разрешении перегрузки, когда требуется явное преобразование.
Из С++ 11 (§20.3.2, n3290):
Примечание. Этот конструктор не должен участвовать в разрешении перегрузки, если U неявно конвертируется в first_type, а V неявно конвертируется в second_type.
Предложен интересный метод обхода SFINAE, но это отступает от текста стандарта.
Как совместимая реализация может исключить это из-за разрешения перегрузки, за исключением некоторой специальной внутренней магии компилятора? То есть может ли реализация сделать это, и я могу дублировать ее для моего собственного типа, возможно? Похоже, что это не соответствует этому! Это похмелье от удаления понятий из С++ 11?
Я действительно задавался вопросом об использовании частного конструктора для выполнения части SFINAE и делегирования из конструктора public, но он не похож на то, что делегирование конструктора участвует в SFINAE таким образом, чтобы сделать эту работу.