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)?