У меня есть код в заголовке, который выглядит так:
#include <memory>
class Thing;
class MyClass
{
std::unique_ptr< Thing > my_thing;
};
Если я включаю этот заголовок в cpp, который не включает определение типа Thing, то это не компилируется под VS2010-SP1:
1 > C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\memory (2067): ошибка C2027: использование undefined типа "Thing"
Замените std::unique_ptr на std::shared_ptr и он скомпилируется.
Итак, я предполагаю, что это текущая реализация VS2010 std::unique_ptr, которая требует полного определения и полностью зависит от реализации.
Или это? Есть ли что-то в нем стандартные требования, которые делают невозможным выполнение std::unique_ptr для работы только с форвардной декларацией? Это кажется странным, поскольку он должен содержать только указатель на Thing, не так ли?