【发布时间】:2021-02-09 14:56:23
【问题描述】:
语言律师/挑剔者的“健全性检查”问题:
在这段代码中:
enum my_enum { AValue1, AValue2 };
using alias_1 = enum my_enum;
using alias_2 = my_enum;
alias_1 和 alias_2 之间有什么区别吗?也就是说,编译器可以以某种方式对它们进行不同的处理吗?我最好的理解是答案是否定的,但是我的一个用户在使用 MSVC 16.8 + CUDA 时遇到了第一种而不是第二种语句的不同编译器行为。类似cannot convert argument 1 from 'my_enum' to 'alias_1'。
注意事项:
- 我想,
#define enum或姓名隐藏之类的病态与答案中的地址相关,但我最感兴趣的是“非病态”情况。 - 专门询问 C++11 以防万一。
- 我发现创建 MWE 很困难,因为我自己没有那个编译器,我通常也不运行 Windows。
【问题讨论】:
标签: c++ visual-c++ enums language-lawyer compiler-bug