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

浙公网安备 33010602011771号