可以比较std::type_info上的指针在常量表达式中的相等性吗?



可以在任意类Tstd::type_info对象上定义一个constexpr指针。语言是否允许在编译时比较这些指针是否相等?

例如:

#include <typeinfo>
template <typename T>
inline constexpr auto * pType = &typeid(T);
int main() {
static_assert( pType<int> == pType<int> );
static_assert( pType<int> != pType<char> );
} 
问题出现了,因为Clang接受它,但是GCC返回错误:
error: non-constant condition for static assertion
8 |     static_assert( pType<int> != pType<char> );
|                    ~~~~~~~~~~~^~~~~~~~~~~~~~
<source>:8:31: error: '(((const std::type_info*)(& _ZTIi)) != ((const std::type_info*)(& _ZTIc)))' is not a constant expression

演示:https://gcc.godbolt.org/z/9broYrEn7

这是一个GCC bug: 85428

顺便说一下,pType<int> == pType<int>并不总是有保证的。