У меня есть код в заголовке, который выглядит так:
#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
, не так ли?