Я сталкивался со следующей программой в C++
:
template <class T>
class Val {
protected:
T x0, x;
public:
Val(T t = 1) : x0(t), x(1) {}
T val() { return x; }
void promote() { this->promote_value(); }
};
По какой-то причине Val<int>(4).val();
работает нормально, хотя нет способа promote_value()
. Я пытался удалить шаблоны:
class OtherVal {
protected:
int x0, x;
public:
OtherVal (int t = 1) : x0(t), x(1) {}
int val() { return x; }
void promote() { this->promote_value(); }
};
Но теперь я получаю сообщение об ошибке:
ошибка: у класса OtherVal нет члена с именем promo_value; Вы имели в виду «продвигать»?
Почему C++
ведет себя так?