Fed*_*dor 5 c++ typeid language-lawyer constexpr c++17
可以在任何类的对象constexpr上定义一个指针。该语言是否允许在编译时比较此类指针是否相等?std::type_infoT
例如:
#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> );
}
Run Code Online (Sandbox Code Playgroud)
问题出现了,因为 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
Run Code Online (Sandbox Code Playgroud)
演示: https: //gcc.godbolt.org/z/9broYrEn7
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |