【发布时间】:2021-09-25 04:53:26
【问题描述】:
请考虑这个简化的c++14 程序:
#include <iostream>
struct A
{
A() { std::cout << "A() "; }
~A() { std::cout << "~A() "; }
};
int main()
{
auto l = std::initializer_list<A>{A()};
std::cout << ". ";
}
https://gcc.godbolt.org/z/1GWvGfxne
GCC 在这里打印
A() . ~A()
意味着std::initializer_list 在作用域结束时被破坏。
Clang 打印:
A() ~A() .
在构造它的行中销毁std::initializer_list。
这两个编译器的行为是正确的还是其中一个是错误的?
【问题讨论】:
-
如果您启用详细警告,Clang 会告诉您问题所在。参见例如on the compiler explorer.
-
谢谢,我明白了。问题仍然是为什么 GCC 的行为不同。
标签: c++14 c++ c++14 language-lawyer initializer-list object-lifetime