Структура в структре

Вот есть у меня структуры и глобальный массив:

struct Vec2
{
	double x;
	double y;

	Vec2 operator+(Vec2 v) { return Vec2{ x + v.x, y + v.y }; }
	Vec2 operator-(Vec2 v) { return Vec2{ x - v.x, y - v.y }; }
	Vec2 operator/(double n) { return Vec2{ x / n, y / n }; }
	Vec2 operator*(double n) { return Vec2{ x * n, y * n }; }
};

struct Circle
{
    Vec2 position = Vec2{ 0.0, 0.0 };
    double radius = 50.0;
    COLORREF color = 0x0;
};

std::vector<Circle> circles;

Потом массив заполняется:

void GenerateCircles(int maxCount)
{
    circles.clear();

    RECT screenRect;
    if (GetClientRect(hRenderingPanel, &screenRect))
    {
        for (int i = 0; i < maxCount; i++)
        {
            double tmpRadius = 40.0;
            int xPosMax = screenRect.right - (int)tmpRadius;
            int yPosMax = screenRect.bottom - (int)tmpRadius;
            double xPos = (double)(rand() % (xPosMax - (int)tmpRadius)) + tmpRadius;
            double yPos = (double)(rand() % (yPosMax - (int)tmpRadius)) + tmpRadius;
            Vec2 tmpPosVec = Vec2{ xPos, yPos };

            bool found = false;
            for (size_t j = 0; j < circles.size(); j++)
            {
                double distance = VectorsDistance(circles[j].position, tmpPosVec);
                if (distance <= circles[j].radius + tmpRadius)
                {
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                Circle circle;
                circle.position = tmpPosVec;
                circle.radius = tmpRadius;
                circle.color = RGB(rand() % 256, rand() % 256, rand() % 256);

                circles.emplace_back(circle);
            }
        }
    }
}

Мне однажды объясняли, что структуры могут содержать только примитивные типы, иначе данные могут теряться при передачи структуры как аргумента функции (если передавать саму структуру, а не указатель). У меня тут структура Circle содержит в себе структуру Vec2 (а сами структуры примитивным типом не являются, вроде как).
Почему тогда данные в поле position не теряются? :thinking:

Потому что фигню какую-то объяснили? Или там какой-то другой контекст.

“передавать саму” это копирование.

Это я помню.
То есть, копирование работает правильно для любых типов, а не только для примитивных? А если в структуре будут указатели? Область памяти, на которую ссылается указатель, не копируется, по-идее :thinking:

Структура - строго непрерывный кусок памяти. копирующийся целиком.
Нельзя вложить саму в себя, только указатель.

Саму в себя никто и не вкладывает.

Ну они и скопируются. Если надо само значение того, на что указывает, то реализовывать конструктор копирования и оператор.