使用std访问时,链接器会抱怨rtti和异常 .

Sample

int main(){
  std::variant<int, float> rf;
  rf = 1;
  std::visit([](auto&& arg){
      using T = std::decay_t<decltype(arg)>;
      if constexpr (std::is_same_v<T, int>)
             std::cout << "OK";
    }, rf);

  }

如果我在没有rtti和异常的情况下编译,它可以工作:

$ /usr/local/opt/llvm/bin/clang++ -std=c++17 -stdlib=libc++ test.cpp -fno-rtti -fno-exceptions

但它不会编译 .

$ /usr/local/opt/llvm/bin/clang++ -std=c++17 -stdlib=libc++ test.cpp

体系结构x86_64的未定义符号:“stode :: bad_variant_access的typeinfo”,引自:test-e84443.o中的_main“std :: bad_variant_access的vtable”,引自:测试中的std :: bad_variant_access :: bad_variant_access() e84443.o注意:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义 . ld:找不到架构x86_64 clang-6.0的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)