[英]typeid result in different compilers
我正在观看以下视频
这里提到g++对于如下代码会报错:
#include<vector>
#include<typeinfo>
#include<iostream>
struct S
{
std::vector<std::string> b ;
};
int main()
{
S s;
std::cout << typeid(S::b).name();
}
error: invalid use of non-static data member ‘S::b’
但是我在msvc和clang下没有遇到过这种错误。 谁是对的,为什么? 以及为什么改为
typeid(&S::b).name();
之后的结果是否正确?
Gcc 是错误的(错误 68604 )。 S::b
是一个 id 表达式,指的是一个非静态数据成员,它只能在未评估的上下文中使用。 Gcc 似乎未能将其视为未评估的表达式。
作为解决方法,您可以:
std::cout << typeid(decltype(S::b)).name();
请注意,在typeid(&S::b).name();
, &S::b
给出一个成员的指针; 结果与使用S::b
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.