Sar*_*yan 27 c++ destructor c++20
我有这段代码,输出如下:
链接到以下示例 https://godbolt.org/z/z8Pn9GsTv
template <typename T>
struct A1 {
A1() {
std::cout << "construction of a1" << std::endl;
}
~A1() {
std::cout << "destruction of a1" << std::endl;
}
~A1() requires (std::is_same_v<T,int>) {
std::cout << "it is an int" << std::endl;
}
};
int main() {
A1 <int>a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
construction of a1
destruction of a1
Run Code Online (Sandbox Code Playgroud)
但交换析构函数的位置会给出其他结果:
代码链接 https://godbolt.org/z/vxj7dPqaj
template <typename T>
struct A1 {
A1() {
std::cout << "construction of a1" << std::endl;
}
~A1() requires (std::is_same_v<T,int>) {
std::cout << "it is an int" << std::endl;
}
~A1() {
std::cout << "destruction of a1" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
输出:
construction of a1
it is an int
Run Code Online (Sandbox Code Playgroud)
想知道这是一个错误吗?
Bob*_*b__ 14
正如Quimby所指出的,这确实是一个报告的 Clang bug 1。
请注意,第二个片段(首先是受约束析构函数的片段)在 Clang 中并没有真正“工作”,它只是忽略了第二个析构函数2。
另请注意,与 gcc 不同,在我撰写本文时,Clang 似乎尚未实现 [ P0848R3 ] (这是关于条件平凡的特殊成员函数)3。
1) https://bugs.llvm.org/show_bug.cgi?id=50570
2) 请参阅例如:https: //godbolt.org/z/rff7qfK65 3) 请参阅功能测试宏
的报告值,例如此处:https://godbolt.org/z/P4z3Pj5vT__cpp_concepts
归档时间: |
|
查看次数: |
1119 次 |
最近记录: |