Ковариация контейнера в C ++

Я знаю, что C ++ не поддерживает ковариацию для элементов контейнеров, как в Java или C #. Итак, следующий код, вероятно, является неопределенным поведением:

#include 
struct A {};
struct B : A {};
std::vector test;
std::vector* foo = reinterpret_cast*>(&test);

Неудивительно, что я получил отрицательные голоса, когда предлагал это решение для другого вопроса .

Но какая часть стандарта C ++ точно говорит мне, что это приведет к в неопределенном поведении? Гарантируется, что оба std :: vector и std :: vector сохранят свои указатели в непрерывном блоке памяти. Также гарантируется, что sizeof (A *) == sizeof (B *) . Наконец, A * a = new B совершенно законно.

Так каких злых духов в стандарте я вызвал (кроме стиля)?

18
задан Community 23 May 2017 в 12:15
поделиться