比较两个typeid表达式是否相等时编译错误

时间:2017-09-11 23:31:32

标签: typeid

在此代码来自培训视频:

#include <iostream>

template<typename T>
struct MyStruct {
   T data;
};

int main(void)
{
   MyStruct<int> s;
   s.data = 2;
   assert(typeid(s.data) == typeid(int));
}

我收到此编译器错误:

class_templates.cpp:12:26: error: invalid operands to binary expression ('const std::type_info' and 'const std::type_info')
   assert(typeid(s.data) == typeid(int));
          ~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~

编译:

clang++ -std=c++14 class_templates.cpp

编辑:如果我用g ++编译,我会得到一个更好的错误:

class_templates.cpp:14:20: error: must #include <typeinfo> before using typeid
    assert(typeid(s.data) == typeid(int));

1 个答案:

答案 0 :(得分:1)

必须使用#include <typeinfo>才能使用typeid(),否则您的程序就会格式不正确。

另见:

Why do I need to #include <typeinfo> when using the typeid operator?