В текущем стандарте преобразования из вашего типа в другой тип не могут быть помечены explicit
, что до некоторой степени имеет смысл: если вы хотите явно преобразовать, вы всегда можете предоставить функцию, которая реализует преобразование:
struct small_int {
int value();
};
small_int si(10);
int i = si.value(); // explicit in some sense, cannot be implicitly converted
Опять же, может не иметь особого смысла , поскольку в следующем стандарте, если ваш компилятор его поддерживает, вы можете пометить оператор преобразования как explicit
:
struct small_int {
explicit operator int();
};
small_int si(10);
// int i = si; // error
int i = (int)si; // ok: explicit conversion
int j = static_cast<int>(si); // ok: explicit conversion