Bester Stil zum Löschen aller Konstruktoren (oder anderer Funktionen)?

Nehmen wir an, ich möchte einen Typ erstellen, der nicht konstruiert werden kann (fragen Sie nicht warum).

struct Impossible
{

Ich könnte es so machen:

    Impossible() = delete;
    // disable automatically generated constructors, don't declare any others
    Impossible(const Impossible&) = delete;
    // I suppose this is redundant with nothing to copy

oder so:

    Impossible(...) = delete;
    // explicitly disable all constructors

oder so:

    template<typename... Ts>
    Impossible(Ts...) = delete;
    // explicitly disable all constructors, template version
};

Ich denke, ich könnte das Gleiche für jede Funktion verlangen, nicht nur für Konstruktoren.

Macht es einen Unterschied, welches ich wähle? In Bezug auf die Syntax denke ich, dass mir die zweite Option gefällt. Aber gibt es überhaupt eine Situation, in der es möglich ist, einen Unterschied zu erkennen (außer im Text einer Fehlermeldung)?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage