Коли уж обсуждаю борьбу с предупреждениями...
Как побороть:
class __declspec(dllexport) Foo
{
private:
struct Impl;
std::shared_ptr<Impl> p_impl; // warning: C4251: 'Foo::p_impl': class 'std::shared_ptr<Foo::IImpl>' needs to have dll-interface to be used by clients of class 'Foo'
public:
// Все конструкторы/деструкторы заданы явно либо запрещены:
Foo();
Foo(const Foo&);
~Foo();
Foo& operator=(const Foo&) = delete;
// Доступ к структуре объекта (на стороне dllimport) ненужен,
// На стороне пользователя может оказаться другой размер класса shared_ptr?
// ... что-то для работы с классом.
int do_work(int);
};
И что можно сделать для избежания предупреждения?
Перейти на голый указатель?