Как указал Майкл Парк добавление идеальных конструкторов переадресации может быть сложным, если мы не хотим оказаться в неправильном конструкторе.
В настоящее время у меня есть класс A
, который использует идеальный конструктор пересылки, и поэтому мне нужно явно объявить 4 конструктора: A&
, const A&
, A&&
и const A&&
:
class A
{
public:
template<typename T> A(T&&);
A(A&);
A(const A&);
A(A&&);
A(const A&&);
};
Я хотел бы запретить использование конструктора const reference rvalue, поэтому я рассматриваю возможность его удаления:
class A
{
public:
template<typename T> A(T&&);
A(A&);
A(const A&);
A(A&&);
A(const A&&) = delete;
};
Похоже, пока работает. Но я просто смотрю на практический образец, хотелось бы лучшего подтверждения, например. из стандарта С++.
Возможно ли, что идеальный пересылающий конструктор заменит удаленный конструктор? Ведь универсальная ссылка T&&
совместима с const A&&
.
template<typename T, std::enable_if_t<!std::is_same_v<T, A>, bool> = true>
говорит использовать это только тогда, когдаT
не являетсяA
. - person NathanOliver   schedule 13.08.2019