Как __declspec(dllimport) в классе влияет на функции класса?

Следующий MCVE выдает предупреждение, используя mingw-w64 4.9.2:

struct __declspec(dllimport) S
{
    int   foo() { return func(); }
    int   func();
    void  other_func();
};

inline int S::func() { return 1000; }

int main() {}

Предупреждение:

dt.cc:9:5: warning: 'int S::func()' redeclared without dllimport attribute
           after being referenced with dll linkage
inline int S::func() { return 1000; }
    ^

Мой вопрос: о какой именно проблеме сообщается, и должен ли я что-либо с этим делать (например, подать отчет об ошибке)?

Предупреждение исчезнет, ​​если я изменю int func(); на inline int func(); - не уверен, что это значит.

Общие сведения. Этот шаблон встречается во многих местах библиотеки C++ под названием POCO. У класса есть некоторые функции, тела которых находятся в DLL (например, other_func здесь), и некоторые функции, тела которых находятся в заголовочном файле (например, func здесь).


person M.M    schedule 18.03.2015    source источник
comment
Я предполагаю, что как функция inline она не экспортируется DLL.   -  person Cheers and hth. - Alf    schedule 18.03.2015
comment
@Cheersandhth.-Альф, ты хочешь сказать, что я должен просто попытаться отключить это предупреждение или что?   -  person M.M    schedule 18.03.2015
comment
Я чувствую, что такие предупреждения должны быть по какой-то причине. Поэтому, если бы я контролировал код, я бы либо определил функцию в определении класса (или, по крайней мере, объявил ее там inline), таким образом, предположительно не экспортируя ее, либо заменил определение inline правильным в файле реализации для экспорта DLL. . Поскольку вы не контролируете код, но это широко используемая библиотека, возможно, просто отключите предупреждение на данный момент, и сообщите о проблеме. Однако я не вижу имени предупреждения. Как отключить безымянное предупреждение g++?   -  person Cheers and hth. - Alf    schedule 18.03.2015
comment
Да, я интересовался тем же самым. Одна вещь, которую я не понимаю (отсюда и название вопроса), заключается в том, распространяется ли declspec в определении класса, т.е. ведут ли себя foo, func и other_func так, как если бы они также были __declspec(dllimport), или это явно должно быть записано в каждую функцию декларация? Предупреждение предполагает, что func() рассматривается как dllimport до момента появления его определения (если удалить функцию foo, ошибка исчезнет).   -  person M.M    schedule 18.03.2015
comment
@Cheersandhth.-Альф, на самом деле я нашел дубликат   -  person M.M    schedule 18.03.2015