新的 C++ 标准下不能编译的代码
新的 C++ 标准下不能编译的代码
#pragma once
class CUIAutomationChangesEventHandler
{
public:
CUIAutomationChangesEventHandler() = default;
virtual ~CUIAutomationChangesEventHandler() = default;
template<typename Function> static int ForEachChangeIdentifiers(Function func);
static size_t GetChangeIdCount();
static int GetAllChangeId(int *id, size_t size);
private:
static const int element_changes_id_[];
long int ref_count_{ 1L };
};
template<typename Function>
inline int CUIAutomationChangesEventHandler::ForEachChangeIdentifiers(Function func)
{
for (size_t i = 0LU; i < sizeof(element_changes_id_) / sizeof(element_changes_id_[0]); ++i)
if (element_changes_id_[i] != 0)
func(element_changes_id_[i]);
return 0;
}
#include "size.h"
const int CUIAutomationChangesEventHandler::element_changes_id_[] =
{
1,
2,
3
};
上面的代码,用 vc++ 2022 编译时,使用 /std:c++11
、/std:c++14
和 /std:c++17
,可以编译通过,使用 /std:c++20
和 /std:c++latest
,不能编译通过。提示:
error C2070: “const int []”: 非法的 sizeof 操作数