简体   繁体   English

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

[英]Can pointers on std::type_info be compared for equality in constant expressions?

One can define a constexpr pointer on std::type_info object of any class T .可以在任何 class Tstd::type_info object 上定义一个constexpr指针。 Does the language allows one to compare such pointers for equality in compile-time?该语言是否允许在编译时比较此类指针的相等性?

For example:例如:

#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> );
} 

The question arises, since Clang accepts it, but GCC returns the error:问题来了,因为 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

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

This is a GCC bug: 85428这是一个 GCC 错误: 85428

By the way, pType<int> == pType<int> is not always guaranteed .顺便说一句, pType<int> == pType<int>并不总是得到保证

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM