Constrain your user-defined conversions
Sometimes you want to add an implicit conversion to a type.
This can be done by adding an implicit conversion operator.
For example, std::string
is implicitly convertible to std::string_view
:
class string { // template omitted for simplicity
public:
operator std::string_view() const noexcept
{
return std::string_view(c_str(), size());
}
};
The conversion is safe, cheap, and std::string
and std::string_view
represent the same platonic value — we match Tony van Eerd’s criteria for implicit conversions and using implicit conversions is justified.
However, even when all criteria are fulfilled, the conversion can still be dangerous.
…
Read this blog post at think-cell's developer blog. Subscribe there to stay up-to-date!