我的Visual Studio 17(2022)项目出现了以下警告,我可以将其简化为以下内容:
测试1.cpp
#include <atomic>
#include "test.h"
int main() {
Test::g_test = true;
}
测试2.cpp
#include <atomic>
struct A {
std::atomic<bool> m_test = false;
};
#include "test.h"
void a() {
Test::g_test = true;
}
测试. h
#pragma once
struct Test {
static inline std::atomic<bool> g_test = false;
};
结果:
1>------ Build started: Project: ConsoleApplication1, Configuration: Release x64 ------
1>test1.cpp
1>test2.cpp
1>LINK : warning C4744: 'static struct std::atomic<bool> Test::g_test' has different type in 'c:\consoleapplication1\test2.cpp' and 'c:\consoleapplication1\test1.cpp': '__declspec(align(1)) struct (1 bytes)' and 'struct (1 bytes)'
我是否违反了一些C++规则?是否是MSVC错误?最好的修复/解决方法是什么?
1条答案
按热度按时间fhg3lkii1#
这是一个编译器错误。请参阅https://github.com/microsoft/STL/issues/3241和https://developercommunity.visualstudio.com/t/10207002。
从STL错误报告https://github.com/microsoft/STL/issues/3241简化,这似乎实际上是一个编译器问题。
创建文件a.cpp:
和文件b.cpp:
然后使用“cl /nologo /std:c++17 /GL a.cpp b.cpp”进行编译,该代码将发出:
值得注意的是,如果
S1
和S0
的宣告在b.cpp
中重新排序,则不会发出警告。