gpt4 book ai didi

c++ - 是否可以使用强制编译器错误扩展 typedef?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:07 26 4
gpt4 key购买 nike

我一直在使用下面显示的方法来强制编译器对我大喊一个变量类型:

template <class T>
struct show_type;

将它与所需的变量一起使用,这样编译器就会错误地给出一个不完整的结构类型:

typedef int32_t s32;
s32 a;
show_type<decltype(a)>();

因此 GCC 5.3.0 产生错误:

invalid use of incomplete type 'struct show_type<int>'

和 MSVC 2015:

'show_type<s32>': no appropriate default constructor available

现在我想知道是否有办法强制错误显示 typedef 的完整层次结构s (即 s32 -> int32_t -> int ),或至少是最新的 typedef和第一个原始类型?我不介意肮脏或邪恶的把戏。

最佳答案

Now I wonder if there is a way to force an error to show full hierarchy of typedefs (that is, s32 -> int32_t -> int), or at least newest typedef and first original type?

没有这样的层次结构。 s32 int32_t int。无法区分这三种类型,因为它们实际上不是三种不同的类型。其中两个只是别名。


您真正要寻找的是静态反射,或 P0194 .这将允许你做类似的事情:

using meta_s32   = reflexpr(s32);
using meta_int32 = meta::get_aliased_t<meta_s32>;
using meta_int = meta::get_aliased_t<meta_int32>;
std::cout << meta::get_name_v<meta_s32> << ", "
<< meta::get_name_v<meta_int32> << ", "
<< meta::get_name_v<meta_int> << '\n';

您可以通过重复使用 get_aliased_t 并在 is_alias_v 产生 false_type 时停止来生成反射层次结构。

关于c++ - 是否可以使用强制编译器错误扩展 typedef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39233631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com