std::destroy_at主要编译器之间的差异?



使用编译器资源管理器

#include <iostream>
#include <memory>
struct test
{
test(int i)
{
std::cout << "test::test("<<i<<")n";
}
~test()
{
std::cout << "~test()n";
}
};
template<>
void std::destroy_at(test* p) 
{
std::cout<<"std::destroy_at<test>n";
p->~test();
}
int
main ()
{
auto sp = std::make_shared<test>(3);
return 33;
}

给出在gcc x86-64或clang x86-64下使用c++ 20的预期输出:

Program returned: 33
test::test(3)
std::destroy_at<test>
~test()

但是x64 msvc v19.32给出:

Program returned: 33
test::test(3)
~test()

就好像std::destroy_at在这里没有作用一样

这是符合的行为,我的误解还是msvc不符合或配置错误?

自c++ 20以来,特化标准库函数是UB。

相关内容

最新更新