I believe you should not think too much about this issue
It happens for constructors, but also for any other method, or even function. For example:
class MyBase
{
// etc.
virtual void doSomething() ;
} ;
class MyDerived : public MyBase
{
// etc.
virtual void DoSomething() ;
} ;
Or:
bool isOk(int value) { /* etc. */ }
bool isOK(double value) { /* etc. */ }
void doSomething(int value)
{
if(isOK(value)) // isOK(double) will be called
{
// Etc.
}
}
And this is not only a problem of character case. This kind of error happens. IDE helpers like autocompletion can help somewhat, as could a good unit-testing code (something covering all methods of a class), but I don't believe the compiler alone could protect against this kind of developer mistyping even with additionnal keywords.
What about CONSTRUCTOR?
As for the CONSTRUCTOR define mentionned before me, this is a bad idea IMHO:
It will help as much as a comment (and so, why not use /* CONSTRUCTOR */ instead?), and if someone thought about using the word CONSTRUCTOR as a define symbol, then you can bet someone else will have the same idea in some header you include but don't own, and that it will break your code...