It is easier to delete unwanted defaults than implementing dummies. class C{ // explicit C(){ unreachable(); } // note: may be ill formed. explicit C() = delete; [..] }; The use of "delete" will produce errors at compile time, much like correcly placed dummies. It's nice to have a real language feature here, to not need to resort to dummies. NB: There is still a hole. If you don't either delete or make a dummy, you can still get caught.