A college at work created a class with only static methods. Because he wants to avoid instantiation, he added a (private) constructor. That’s fine so far. But the constructor is only declared and has no implementation. Thus you will get an “undefined reference” when using it once.
Imho it must be enough to make the constructor private – and declarations without implementation is ugly. What is your opinion about this?
I see your concern.
In fact, making a copy-constructor private and then leave it unimplemented, is a common practice, and it is certainly necessary in certain cases. This has led to the definition of a well-known C++ idiom, the Non Copyable Mixin to give it more “visibility”. But even when the non copyable mixin is not used and the solution is applied locally, it is IMO perfectly acceptable (because it is a known idiom).
In your specific case, since as I understand we are not talking about copy constructors, but any constructors (the class is just a container for some static methods and you do not want it to be initialized), I think using a namespace and declaring your functions within it would be a better solution.