Functions sometimes check the sanity of the data passed to them. This could require a number of checks and error handing. For example:
Foo& Foo::operator=(const Foo& obj)
{
if(&obj == this)
return *this
...
}
A more convenient way of handling this situation would be to allow constraints on arguments and let the compiler check or add code to handle the condition.
For example:
Foo& Foo::operator=(const Foo& obj { &obj != this } ) <-- Argument constraint in braces
{
...
}
Possibly throwing an "argument constraint" exception for run-time evaluations and failing to compile or compiler warning for compile-time evaluations.
--Jim Smith