Wir hatten diese Situation und wunderte sich über den besten Weg, esWie kann ich "noexcept" sagen, wenn die Ausführung des geschützten Basiskonstruktors keine Ausnahme ist?
template<typename T>
struct A : T {
A(T &&t) noexcept(noexcept(T(std::move(t))))
:T(std::move(t))
{ }
};
Dies ist leider zu beheben nicht Konstruktor bewegen zu kompilieren, weil T die geschützt ist, und wir sind nur für *this
nennen es im Konstruktor Initialisierungsliste erlaubt. Was sind die Problemumgehungen um dies zu erreichen oder gibt es sogar einen Standard Weg dafür?
„und wir sind nur für' * this' nennen es im Konstruktor Initialisierungsliste erlaubt“- warten, was? Ist dies eine spezielle Regel für geschützte * Konstruktoren *? Dass Sie sie nur in der Initialisierungsliste verwenden können? –
Welcher Compiler kompiliert es nicht? – ecatmur
@ecatmur Intel/GCC schlägt fehl (wahrscheinlich auch Clang). Wie bei allen geschützten Funktionen sind nur Aufrufe durch Objekte vom Typ '* this' oder abgeleitete Klassen erlaubt. –