Основная проблема заключается в том, что в общем случае вы не знаете, является ли что-то конструктором копирования / перемещения, пока не узнаете аргументы шаблона и не создадите экземпляр специализации, но для CTAD вы не знаете аргументы шаблона (дух) и должны идти одни заявления:
template<bool B, class T>
struct A {
A(std::conditional_t<B, A, int>&); // copy ctor? maybe
A(std::conditional_t<!B, A&&, char>); // move ctor?
T t;
// A(const A&); // implicitly declared? or not?
// is this even the right signature? (depends on T)
// A(A&&); // implicitly declared? or not?
};
A a = A<true, int>(); // deduce?
Кандидат на вычет копии работает вокруг этого, а также избегает тонкостей разрешения перегрузки, касающихся категории значений и квалификаций cv, используя параметр по значению.