Visual Studio удаляет мою виртуальную функцию из шаблона класса в статической библиотеке - PullRequest
0 голосов
/ 19 марта 2019

В настоящее время у меня есть два проекта: приложение и статическая библиотека, используемые этим проектом. В моей статической библиотеке есть что-то вроде этого:

// interface.h
struct IInterface {
    virtual ~IInterface() = default;
    virtual void foo() = 0;
};

// baseclass.h
template < class T > struct BaseClass : public IInterface {
    virtual ~BaseClass() = default;
    virtual void foo() override final;
protected:
    virtual void onFoo() = 0;
};

template < class T > BaseClass< T >::foo() {
    // some other code here
    onFoo();
}

// derivedclass.h
struct SomeStruct { /* ... */ };

struct DerivedClass : public BaseClass< SomeStruct > {
protected:
    virtual void onFoo() override final;
}

// derivedclass.cpp
void DerivedClass::onFoo() {
    // ...
}

После того, как я попытался скомпилировать это как статическую библиотеку, все было в порядке. Затем я попытался статически связать эту библиотеку с моим приложением и использовать эти классы, и в Visual Studio 2017 произошли следующие предупреждения и ошибки:

Warning C4505 ... : unreferenced local function has been removed

, что, в свою очередь, вызвало ошибку компоновщика unresolved external symbol. Похоже, компилятор удалил функцию foo. Что-то не так с этим кодом? Почему компилятор считает, что моя функция является локальной и не имеет ссылок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...