При поиске решения этого вопроса я обнаружил эту ветку на другом форуме , в которой говорится, что стандарт требует полного определения всех параметров шаблона для STL-Datastructure. , Это означает, что создание структуры, которая хранит элементы своего собственного типа внутри себя, вызывает неопределенное поведение. Однако, насколько я могу судить, это не учитывается для большинства структур данных до C ++ 11 (то есть std::vector
, std::map
и т. Д.).
В чем на самом деле может быть проблема использования неполных типов в STL-Datastructures? Или, точнее, какую потенциальную опасность может вызвать следующий код:
#include <stdint.h>
#include <map>
struct Test {
std::map<uint32_t, Test> m_map1;
};
int main() {
return 1;
}
Или это одна из тех проблем, когда этот код может не компилироваться с некоторыми реализациями STL, но если он компилируется, вы можете быть уверены, что он работает?