Najlepszy styl do usuwania wszystkich konstruktorów (lub innej funkcji)?

Powiedzmy, że chcę stworzyć typ, którego nie można skonstruować (nie pytaj dlaczego).

struct Impossible
{

Mógłbym to zrobić w ten sposób:

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

lub tak:

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

lub tak:

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

Myślę, że mógłbym zapytać to samo o każdą funkcję, nie tylko konstruktorów.

Czy to ma jakieś znaczenie, który wybiorę? Pod względem składni myślę, że lubię drugą opcję. Ale czy jest jakaś sytuacja, w której można wykryć różnicę (inną niż w tekście komunikatu o błędzie)?

questionAnswers(3)

yourAnswerToTheQuestion