c++ - 模板化函数时链接器错误未找到析构函数

标签 c++ c++11 linker clang linker-errors

我有一个奇怪的错误,我无法解决这个问题。我已将其简化为一个简单的示例。我可以通过创建一个空的析构函数来修复它,但我真的很想知道发生了什么。

#include <cstdio>
#include <functional>

struct test {
    inline test()
    {}

    const std::function<void()> f;
    const int universe = 42;
};

template<size_t n = 1>
inline void do_test(const test& t = {}) {
    printf("%d\n", t.universe);
}

int main(int, char**) {
//  test t;
    do_test();
    return 0;
}

这不会编译,输出错误:

clang++ -O3 -std=c++1z -stdlib=libc++ -Wall main.cpp
Undefined symbols for architecture x86_64:
  "test::~test()", referenced from:
      _main in main-df96d9.o
ld: symbol(s) not found for architecture x86_64

如果您取消注释我创建 test t; 对象的行,或者从 do_test() 中删除模板参数,它将编译。

请注意,该示例过于简单,实际软件需要自定义构造函数、模板参数等。

知道它为什么提示找不到析构函数吗?

最佳答案

似乎在 clang < 4 中确认了错误。

关于c++ - 模板化函数时链接器错误未找到析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44092202/

相关文章:

c++ - QStateMachine 的同步问题

c++ - 无分支内部合并比内部合并与分支慢

c++ - 重载宏

c++ - 知道为什么 std::move 在这里失败了吗?

xcode 设置——链接映射文件的路径——它是什么?

c++ - Microsoft 的 GCC 选项 init_priority 是什么?

c++ - 使用 VS2015 更改应用程序的入口点

c++ - Qt5内存使用取决于窗口大小?

c++ - 那么在 STL 集合中可以安全地使用 unique_ptr 吗?

c++ - 甚至未被引用的类方法的未解析外部符号