具有模板化模板参数时,仅在调试器中找不到符号

时间:2017-07-16 15:43:20

标签: c++ templates llvm lldb llvm-clang

将以下代码作为test.cpp, 使用clang++ -c test.cpp -o test.o -g; clang++ test.o -g -all_load构建,在return a.getValue();设置断点并尝试从lldb p a.getValue()开始:

在unix上运行llvm 3.8.0 - 效果很好

在OSX上运行xcode或llvm 8.1.0 - 我收到以下错误:

error: Couldn't lookup symbols:
  __ZNK4Test7MyClassILi2ELi3EE8getValueEv

两个有趣的事实:

  1. 如果我删除最后一个模板参数 - 一切正常
  2. 如果我直接构建而不通过.o文件(clang++ test.cpp)=一切顺利
  3. 任何人都知道发生了什么,以及如何解决?

    namespace Test{
        template<class T>
        class BLA{
        public:
            T getBlaValue() const{return 3;}
        };
    
        template  <int N1, int N2, template<class T>class Impl = BLA>
        class MyClass {
        private:
    
        public:
    
            __attribute__((used))
            int getValue() const
            {
                return 3;
            }
        };
    
    }
    
    int main()
    {
        Test::MyClass<2, 3> a;
    
        return a.getValue();
    }
    

0 个答案:

没有答案