Может ли компилятор (если очень захочет), кастовать к базовым классам при передаче по ссылке?
Вроде все работает, но вдруг здесь undefined behavior.
#include <iostream>
template <typename T>
class Base {
public:
int getX() const {
return static_cast<const T*>(this)->x;
}
};
class Derived : public Base<Derived> {
public:
int x = 5;
};
template <typename T>
void foo(const Base<T>& a) {
std::cout << a.getX() << std::endl;
}
int main() {
Derived a;
foo(a); // выводит 5, это UB?
Base<Derived> b;
foo(b); // ожидаемо выводит мусор
return 0;
}