Size: a a a

2020 March 17

АК

Александр Караев in pro.cxx
Alex
ну то есть прокатило потому, что место использования - это .срр, где все типы complete
Если они у тебя в cpp complete, то да
источник

IZ

Ilia Zviagin in pro.cxx
Alex
то есть, просто с неполным классом нельзя объявить вектор? Так вон же на годболт компилится
Покажи, ё
источник

IZ

Ilia Zviagin in pro.cxx
Alex
то есть, просто с неполным классом нельзя объявить вектор? Так вон же на годболт компилится
Нельзя, у неполного типа нет размера даже
источник

IZ

Ilia Zviagin in pro.cxx
Александр Караев
Можно, главное, чтобы во всех местах, где требуется определение класса, оно было доступно (работа с контейнером, деструктор)
Нельзя
источник

АК

Александр Караев in pro.cxx
Ilia Zviagin
Нельзя
T* data;
std::size_t size, cap;

можно, вектор ничем не хуже. Впрочем, конкретной строкой из стандарта не тыкну
источник

IZ

Ilia Zviagin in pro.cxx
Alex
то есть, просто с неполным классом нельзя объявить вектор? Так вон же на годболт компилится
Покажи объявление что ты сделал
источник

АК

Александр Караев in pro.cxx
Нашел информацию по теме.
Это не спецификацируется стандартом. Стандартная библиотека сама выбирает между двух стульев:
1) supports incomplete types T, and thus must be unconditionally copyable
2) conditionally copyable, and thus type T must be complete

Это к вопросу о том, является ли проверка на копируемость вектора из MoveOnly типов SFINAE-friendly
источник

АК

Александр Караев in pro.cxx
источник

АК

Александр Караев in pro.cxx
В конце есть табличка, в которой показано, что libstdc++, libc++ и MSVC для вектора взяли реализацию, которая поддерживает incomplete типы
источник

АК

Александр Караев in pro.cxx
источник

IZ

Ilia Zviagin in pro.cxx
Александр Караев
T* data;
std::size_t size, cap;

можно, вектор ничем не хуже. Впрочем, конкретной строкой из стандарта не тыкну
Ну покажи
источник

IZ

Ilia Zviagin in pro.cxx
Александр Караев
T* data;
std::size_t size, cap;

можно, вектор ничем не хуже. Впрочем, конкретной строкой из стандарта не тыкну
Покажи объявление переменной контейнера
источник

АК

Александр Караев in pro.cxx
Ilia Zviagin
Покажи объявление переменной контейнера
struct A;
struct B { std::vector<A> a; };

Или даже...
struct B { std::vector<B> b; };
источник

v

vehlwn in pro.cxx
Александр Караев
struct A;
struct B { std::vector<A> a; };

Или даже...
struct B { std::vector<B> b; };
Да. У меня это работает. А может не работать?
источник

АК

Александр Караев in pro.cxx
vehlwn
Да. У меня это работает. А может не работать?
Скорее всего неспецифицировано. Я выше ссыль кинул на подробный пост по теме.
источник

АК

Александр Караев in pro.cxx
vehlwn
Да. У меня это работает. А может не работать?
It varies from vendor to vendor.
источник

AZ

Alexander Zaitsev in pro.cxx
Александр Караев
В конце есть табличка, в которой показано, что libstdc++, libc++ и MSVC для вектора взяли реализацию, которая поддерживает incomplete типы
ух за табличку спасибо
источник

A

Alex in pro.cxx
Александр Караев
В конце есть табличка, в которой показано, что libstdc++, libc++ и MSVC для вектора взяли реализацию, которая поддерживает incomplete типы
Понял, то есть это не гарантируется стандартом. Спасибо.
источник

IZ

Ilia Zviagin in pro.cxx
Александр Караев
struct A;
struct B { std::vector<A> a; };

Или даже...
struct B { std::vector<B> b; };
Ну, я вообще-то не это имел в виду, автор там хотел полиморфные контейнеры получить.

Но что такое может компилироваться, я тоже не думал.
источник

AN

Alexander N in pro.cxx
Александр Караев
В конце есть табличка, в которой показано, что libstdc++, libc++ и MSVC для вектора взяли реализацию, которая поддерживает incomplete типы
Как это вообще работает?
источник