Предположим, что у вас есть это:
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
отрицательный, но было бы лучше, если бы я мог получить ошибку компилятора для это.
Я почти уверен, что есть дубликат, но ближайший я мог бы найти этот вопрос, который скорее спрашивает, почему допускается неявное преобразование.
Меня интересуют как решения С++ 11, так и pre С++ 11, предпочтительно те, которые будут работать в обоих.