C++20标准导致的一个bug

1
2
3
4
5
6
7
8
9
10
11
12
    typedef struct{
         int Sunday = 0;
         int Monday = 1;
         int Tuesday = 2;
         int Wednesday = 3;
         int Thursday = 4;
         int Friday = 5;
         int Saturday = 6;
    }Week;
    Week w;
    cout << w.Monday << endl;
    cout << sizeof(w) << endl;

 

 

 

 

 

 

 

今天在编写代码时,在VS 2019版本中编译上述代码会报错:

错误 C5208 typedef 名称中使用的未命名的类不能声明非静态数据成员、成员枚举或成员类以外的成员 

原因就是在最新的C++20标准中,为了更好的实现模块module的特性,typedef 一个未命名的struct被限制为只能使用纯粹的c语言语法,它不能通过赋值进行类内初始化了。这一改动适合VS 16.6及以上的版本,这个版本非常新,所以你在网络上当然找不到回答了。我自己的VS一段时间没更新才16.5呢,你这个代码在我的VS上都能正常运行。

怎么办呢,给这个类起个名字就好了。

具体可以参考:https://www.zhihu.com/question/397111829/answer/1243864776

posted @ 2020-09-26 20:38  部分逆和  阅读(2332)  评论(0)    收藏  举报