Предположим, у меня есть следующая упрощенная программа:
#include <cassert>
struct Dimensions {
Dimensions& operator=(int i) {
assert(i != 0);
return *this;
}
};
int getDim();
int main() {
Dimensions dims;
dims = getDim();//ok, just use runtime assert
dims = 0;//compile error wanted here
return 0;
}
В первом случае (getDim
) невозможно проверить время компиляции, поэтому мы рады просто проверить его во время выполнения.
Но возможно ли как-то обнаружить и при компиляции (для второго случая, dims = 0;
), когда в теории это выглядит так, как будто это возможно? (возможно с какой-то перегрузкой или даже оберткой?)