Предположим, у вас есть это:
struct Foo {
Foo(unsigned int x) : x(x) {}
unsigned int x;
};
int main() {
Foo f = Foo(-1); // how to get a compiler error here?
std::cout << f.x << std::endl;
}
Можно ли предотвратить неявное преобразование?
Единственный способ, который я мог придумать, - это явно предоставить конструктор, который принимает int
и генерирует какую-то ошибку времени выполнения, если int
отрицательно, но было бы лучше, если бы я мог получить для этого ошибку компилятора.
Я почти уверен, что есть дубликат, но ближайший, который я смог найти, это этот вопрос, который скорее спрашивает, почему разрешено неявное преобразование.
Меня интересуют оба решения, C ++ 11 и pre C ++ 11, желательно то, которое будет работать в обоих.