Strangely enough, you need to do this:
friend CTribool (::operator !) ( const CTribool& rkTribool );
You need to specify that your function is in global scope, but without the parentheses, your ::
would bind with CTribool, as if you were doing this:
friend (CTribool::operator !) ( const CTribool& rkTribool );
in which case it would think you were specifying a function without a return type.