У меня есть код в заголовке, который выглядит следующим образом:
#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: использование неопределенного типа 'Thing'
Замените std :: unique_ptr
на std :: shared_ptr
, и он компилируется.
Итак, я предполагаю, что это текущая реализация VS2010 std :: unique_ptr
, которая требует полного определения и полностью зависит от реализации.
Или нет? Есть ли в его стандартных требованиях что-то такое, что делает невозможным для реализации std :: unique_ptr
работать только с предварительным объявлением? Это кажется странным, ведь он должен содержать только указатель на Thing
, не так ли?