C++ ";“枚举”;在using语句中-它有区别吗?

C++ ";“枚举”;在using语句中-它有区别吗?,c++,visual-c++,enums,language-lawyer,compiler-bug,C++,Visual C++,Enums,Language Lawyer,Compiler Bug,针对语言律师/挑剔者的“理智检查”问题: 在这段代码中: enum my_enum { AValue1, AValue2 }; using alias_1 = enum my_enum; using alias_2 = my_enum; alias_1和alias_2之间有什么区别吗?也就是说,编译器会以不同的方式对待它们吗?我的理解是答案是“否”,但我的一个用户在使用MSVC 16.8+CUDA时,在第一类语句而不是第二类语句中遇到了不同的编译器行为。类似于的操作无法将参数1从'my_en

针对语言律师/挑剔者的“理智检查”问题:

在这段代码中:

enum my_enum { AValue1, AValue2 };

using alias_1 = enum my_enum;
using alias_2 = my_enum;
alias_1
alias_2
之间有什么区别吗?也就是说,编译器会以不同的方式对待它们吗?我的理解是答案是“否”,但我的一个用户在使用MSVC 16.8+CUDA时,在第一类语句而不是第二类语句中遇到了不同的编译器行为。类似于
的操作无法将参数1从'my_enum'转换为'alias_1'

注:

  • #define enum
    或姓名隐藏这样的病理学与答案中的地址相关,我想,但我最感兴趣的是“非病理”情况
  • 如果C++11很重要,请特别询问
  • 我发现很难创建一个MWE,因为我自己没有那个编译器,也不经常运行Windows

我能想到的唯一区别是,使用关键字
enum
(如中所示),非类型名称将被排除在名称查找之外

(强调矿山)

详细说明的类型说明符中的类名或枚举名可以是简单标识符,也可以是简单标识符。根据名称的外观,使用或查找名称但无论哪种情况,都不考虑非类型名称

例如


我暗示没有隐瞒,但这是一个有效的答案。除了隐藏之外,还有什么吗?@einpoklum使用别名_2=my_enum在
中隐藏名称。使用
enum
,非类型名称被排除,名称隐藏问题就消失了。除此之外,我想不出还有什么不同。是的,我理解。我应该澄清这不是我追求的关键。因此,您的答案很好,但请参见编辑。
enum my_enum { AValue1, AValue2 };

int main()
{
    int my_enum;
    using alias_1 = enum my_enum; // works; refers to the enum my_enum
    //using alias_2 = my_enum;    // doesn't work; the non-type name my_enum in main() is found
}