Рассмотрим следующий код:
struct base {};
struct derived : public base {};
int main() {
derived d = {};
derived* ptr_d = &d;
derived*& ref_ptr_d = ptr_d;
base*& ref_ptr_b = static_cast<base*&>(ref_ptr_d); // this won't compile
(void) ref_ptr_b;
return 0;
}
Почему ref_ptr_d
интерпретируется как derived*
вместо derived*&
, а приведение недействительно?
Я могу воспроизвести его на компиляторах MSVC и gcc.
int a, &b=a, &c=b;
иint a, &b=a, &c=a;
. В обоих случаяхa
,b
иc
— одно и то же. - person Kevin   schedule 27.07.2017